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?

Foi útil?

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ê)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top