se continuar o trabalho em um do tempo?
Pergunta
Eu tenho um fazer enquanto que se parece com:
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 ela não funciona, a sua indo para ir para o topo da fazer declaração, eo usuário é nulo assim que as coisas vão quebrar?
Talvez eu deveria refazer o loop para um tempo declaração?
Solução
A continuar o faça saltar para a avaliação no botton para que o programa pode avaliar se ele tem para continuar com outra iteração ou saída. Neste caso, ele vai sair.
Esta é a especificação: http: // java .sun.com / docs / books / jls / third_edition / html / statements.html # 6045
Tais questões de linguagem que você pode pesquisar-lo na linguagem Java Specification: http: // java. sun.com/docs/books/jls/
Outras dicas
Isso realmente não seria a melhor maneira de escrever esse código. Se o usuário for nula, você vai ter um NullPointerException quando você tentar obter user.id da próxima vez. A melhor maneira de fazer isso seria:
User user = UserDao.Get(1);
while(user != null) {
// do something with the user
user = UserDao.GetNext(user.id);
}
Por que você está testando usuário em dois lugares? A enquanto condição irá terminar o loop quando o usuário é nulo, que é o que você quer.
Sim, continue
vai trabalhar em um loop do..while.
Você provavelmente vai querer usar break
vez de continue
para parar o processamento dos usuários, ou apenas remover a if null continue
mordeu completamente desde o while vai sair assim que o usuário é nulo qualquer maneira.
A resposta curta, sim, continuar (e break) trabalho corretamente em fazer enquanto loops.
Como outros apontaram, porém, a partir do exemplo parece que você pode estar esperando o comportamento errado de continuar.
Vamos ver:
$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
Sim, é verdade. Neste exemplo você pode ver valor y
é 100
porque a instrução continue
foi executado e impediu a variável de ser aumentada mais tarde.
A continuar irá saltar para a declaração de avaliação loop dentro ao mesmo tempo que parece redundante, já que o seu caso e, enquanto estão avaliando a mesma coisa. Eu acho que seria melhor usar uma pausa ou simplesmente deixar o tempo condição de fazer o trabalho (a sua condição enquanto já está verificando isso para você)