Frage

Ich habe eine do während der wie folgt aussieht:

User user = userDao.Get(1);

do
{
 // processing


 // get the next user
 //
 user = UserDao.GetNext(user.Id);

 if(user == null)
       continue;   // will this work?????????????
}
while ( user != null)

Wenn es funktioniert, sein an die Spitze der do-Anweisung gehen gehen, und Benutzer ist null, so Dinge zu brechen gehen?

Vielleicht sollte ich die Schleife zu einer while-Anweisung überarbeiten?

War es hilfreich?

Lösung

Die continue macht es am botton auf die Auswertung springen so kann das Programm bewerten, wenn sie mit einer anderen Iteration oder verlassen hat, um fortzufahren. In diesem Fall wird es verlassen.

Dies ist die Spezifikation: http: // java .sun.com / docs / Bücher / JLS / third_edition / html / statements.html # 6045

Eine solche Sprache Fragen, die Sie in der Java Language Specification suchen: http: // java. sun.com/docs/books/jls/

Andere Tipps

Das wäre wirklich nicht der beste Weg, um diesen Code zu schreiben. Wenn Benutzer null ist, erhalten Sie eine Nullpointer erhalten, wenn Sie versuchen, um user.id das nächste Mal bekommen. Ein besserer Weg, dies zu tun wäre:

User user = UserDao.Get(1);
while(user != null) {
  // do something with the user
  user = UserDao.GetNext(user.id);
}

Warum testen Sie Benutzer an zwei Orten? Die while Bedingung wird die Schleife beendet, wenn Benutzer null ist, das ist, was Sie wollen.

Ja, continue wird in einem do..while Schleife arbeiten.

Sie wollen wahrscheinlich break statt continue verwenden, um die Benutzer zu stoppen Verarbeitung, oder einfach nur das if null continue Bit vollständig entfernen, da wird die while-Schleife so schnell ausbrechen als Benutzer sowieso null ist.

Kurze Antwort ja, dann weiter (und bricht) arbeitet ordnungsgemäß in Do While-Schleifen.

Wie andere haben jedoch darauf hingewiesen, aus dem Beispiel sieht es aus wie Sie weiterhin das falsche Verhalten erwartet werden können.

Lassen Sie uns sehen:

$cat DoWhileContinue.java 
class DoWhileContinue {

    public static void main( String [] args ) {
        int i = 0;
        int y = 0;
        do {
            i++;
            if( i > 100 ) {
                continue;
            }
            y++;

        } while( i < 500  );
        System.out.printf("i=%d, y=%d %n", i, y );
    }
}
$javac DoWhileContinue.java 
$java DoWhileContinue
i=500, y=100 

Ja, es funktioniert. In diesem Beispiel können Sie y Wert ist 100 weil die continue-Anweisung ausgeführt wurde und verhinderte die Variable aus danach erhöht wird.

Die weiterhin in der während auf der Schleife Auswertung Anweisung springen, die redundante sieht aus, als Ihr, wenn und während sich die gleiche Sache zu bewerten. Ich denke, es wäre besser, eine Pause zu verwenden oder einfach die während Zustand lassen die Arbeit tun (Ihr während Zustand bereits es für Sie überprüft)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top