Domanda

Ho un do po che assomiglia:

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)

Se funziona, la sua intenzione di andare in cima della dichiarazione do, e l'utente è nullo quindi le cose stanno andando a rompere?

Forse dovrei rielaborare il ciclo per una dichiarazione po '?

È stato utile?

Soluzione

Il continuano rende saltare alla valutazione al bottone in modo che il programma è in grado di valutare se deve continuare con un altro iterazione o uscire. In questo caso si uscirà.

Questa è la specifica: http: // java .sun.com / docs / libri / JLS / third_edition / html / statements.html # 6045

Queste domande lingua è possibile cercare nel Specification linguaggio Java: http: // java. sun.com/docs/books/jls/

Altri suggerimenti

Questo in realtà non sarebbe il modo migliore per scrivere questo codice. Se l'utente è nullo, si otterrà un NullPointerException quando si cerca di ottenere user.id la prossima volta. Un modo migliore per fare questo sarebbe:

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

Perché sei test utente in due posti? La condizione mentre si ferma il ciclo quando l'utente è nullo, che è quello che si desidera.

Sì, continue lavorerà in un ciclo do..while.

Probabilmente si desidera utilizzare break invece di continue per interrompere l'elaborazione degli utenti, o semplicemente rimuovere la punta if null continue completamente dal momento che il ciclo while scoppierà non appena utente è nullo in ogni caso.

Risposta breve sì, continuare (e rompere) funziona correttamente in do while.

Come altri hanno fatto notare, però, dall'esempio Sembra che si potrebbe essere in attesa del comportamento sbagliato da continuare.

Vediamo:

$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 

Sì lo fa. In questo esempio si può vedere il valore y è 100 perché l'istruzione è stata eseguita continue e ha impedito che la variabile venga aumentata in seguito.

Il continuano salterà la dichiarazione di valutazione all'interno del ciclo, mentre che sembra ridondante come se e mentre stanno valutando la stessa cosa. Penso che sarebbe meglio utilizzare una pausa o semplicemente lasciare che la condizione, mentre fare il lavoro (la sua condizione, mentre è già controllando per voi)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top