J'essaye de faire un cours qui vous permet de répéter une tâche un certain nombre de fois, ou jusqu'à ce qu'une condition soit rencontrée. Avant de poursuivre, considérer les points suivants:Java | boolean ne réévalue pas/met à jour
int test = 0;
Et ma classe de répétition:
public static abstract class Repeat {
public void loop(int c) {
for (int i = 0; i < c; i++) {
run();
}
}
public void until(boolean c) {
while (!c) {
run();
}
}
public abstract void run();
}
La question que j'ai est la méthode until(boolean c)
, pas la méthode loop(int c)
. La méthode de boucle fonctionne très bien, comme le prouve ci-dessous:
public static void main(String[] args) {
new Repeat() {
@Override
public void run() {
test += 1;
System.out.println(test); // so I know what test currently is
}
{
loop(10);
}
};
}
qui change test en 1, 10 fois. La console prouve que correcte:
1
2
3
4
5
6
7
8
9
10
Maintenant pour la question. Si j'essaie d'utiliser la méthode until()
, il deviendra lag lag si je ne termine pas le lancement dans quelques secondes, car il va incrémenter test
infiniment.
public static void main(String[] args) {
new Repeat() {
@Override
public void run() {
test += 1;
System.out.println(test); // so I know what test currently is
}
{
loop(10);
}
};
new Repeat() {
@Override
public void run() {
test -= 1;
System.out.println(test);
}
{
until(test == 0);
}
};
}
Cela continue indéfiniment. Mon hypothèse est que parce que le booléen qui est passé en (test == 0)
n'est jamais mis à jour, donc, si cela est correct, quelqu'un peut-il me dire comment le mettre à jour? Et si mon hypothèse est fausse, qu'est-ce qui la cause et comment puis-je la réparer?
Merci à tous ceux qui lit réellement chaque mot que je "tapé" (copy-collé la plupart du temps).
Je n'ai pas fini par utiliser votre réponse directement, mais cela m'a finalement permis de trouver la solution. Merci! –