Neustart der while-Schleife
Ich versuche zu starten der while-Schleife. Ich habe deklarierte variable keepGoing vom Typ boolean. Wenn die int-variable x wird aus dem Fenster, keepGoing änderungen auf false. Dann die reset () - Methode haben, um keepGoing=true. Es funktioniert, aber die while-Schleife nicht funktioniert.
Klasse mit reset() und checkWin():
private void reset() {
b.x = 250;
b.y = 100;
b.keepRunning = true;
a.keepGoing = true;
System.out.println(a.keepGoing);
}
public void checkWin() {
if (b.keepRunning) {
if (b.getX() < -10) {
a.score++;
JOptionPane.showMessageDialog(okno, "Player " + p.getScore()
+ " - Computer " + a.getScore(), "Oh, well...",
JOptionPane.INFORMATION_MESSAGE);
b.keepRunning = false;
a.keepGoing = false;
System.out.println(a.keepGoing);
reset();
} else if (b.getX() > 599) {
p.score++;
JOptionPane.showMessageDialog(okno, "Player " + p.getScore()
+ " - Computer " + a.getScore(), "Good!",
JOptionPane.INFORMATION_MESSAGE);
b.keepRunning = false;
a.keepGoing = false;
System.out.println(a.keepGoing);
reset();
}
}
}
Zweite Klasse, mit Gewinde, keepGoing und die while-Schleife:
Runnable intel = new Runnable() {
public void run() {
while (keepGoing) {
while (getY() < board.ball.getY()) {
System.out.println(keepGoing + " " + getY());
try {
if (y == 220) {
} else {
y += 1;
Thread.sleep(10);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
while (getY() > board.ball.getY()) {
System.out.println(keepGoing + " " + getY());
try {
if (y == 0) {
} else {
y -= 1;
Thread.sleep(10);
}
} catch (InterruptedException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
};
InformationsquelleAutor Adrian Marszałek | 2012-07-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie das keyword -
continue
zu gehen, um die nächste iteration der Schleife. Zum Beispiel:if(condition){//the rest of code}else{}
Dank! 🙂Man sollte wirklich eine zweite Flagge in der bedingten oder ein Beispiel für eine
break
- Anweisung, um zu zeigen, wie Sie den Ausgang einer Schleife mit Bedingung-setup alswhile(true)
aber +1Sollte wohl schlafen für eine Weile zu auch auf ein auch weiterhin.
InformationsquelleAutor Eng.Fouad
Wenn die
keepGoing
Flagge ist ein Zugriff von verschiedenen threads (von denen ich denke, dein Beispiel zeigt, es ist nicht klar), dann brauchen Sie, um die Synchronisierung zu verwenden, um sicherzustellen, dass wenn Sie ein update für diekeepGoing
fahne in die reset () - Methode, es ist sichtbar, um den thread in deinem Thread. Möchten Sie vielleicht zu prüfen, dieAtomicBoolean
Klasse.Wirksame Java, Item #66
Sie sind richtig, dass ist der wahre Grund, warum es nicht funktioniert wie vorgesehen. Die concurrency-problem ist immer noch gültig, jedoch, und ist viel subtiler, wie es funktioniert maximal der Zeit, dann auf mysteriöse Weise nicht nur, wenn Sie das nicht wollen 🙂
Ich Stimme zu, es ist deffinatley etwas aufpassen.
InformationsquelleAutor wolfcastle