O que é a palavra-chave "Continuar" e como ela funciona em Java?
-
Qual é a palavra-chave?
Como funciona?
- quando é usado?
10 answers
Uma declaração continue
sem um rótulo irá executar de novo a partir da condição o laço mais interior while
ou do
, e a partir da expressão de actualização do laço mais interior for
. É muitas vezes usado para terminar o processamento de um loop e, assim, evitar declarações if
profundamente aninhadas. No exemplo a seguir continue
irá obter a próxima linha, sem processar a seguinte declaração no loop.
while (getNext(line)) {
if (line.isEmpty() || line.isComment())
continue;
// More code here
}
Com uma legenda, continue
irá executar novamente a partir do ciclo com a legenda correspondente, em vez do laço mais interior. Isto pode ser usado para escapar de laços profundamente aninhados, ou simplesmente para clareza.
Às vezes continue
também é usado como espaço de substituição, a fim de tornar um corpo de loop vazio mais claro.
for (count = 0; foo.moreData(); count++)
continue;
A mesma declaração sem legenda também existe em C e c++. O equivalente em Perl é next
.
Este tipo de fluxo de controlo não é recomendado, mas se assim o desejar pode também utilizar continue
para simular uma forma limitada de goto
. No exemplo a seguir o continue
irá executar de novo o ciclo for (;;)
vazio.
aLoopName: for (;;) {
// ...
while (someCondition)
// ...
if (otherCondition)
continue aLoopName;
continue
é mais ou menos como goto
. Está familiarizado com break
? É mais fácil pensar neles em contraste:
break
termina o loop (salta para o código abaixo dele).continue
termina o resto do processamento do código dentro do loop para a iteração atual, mas continua o ciclo.
int sum = 0;
for(int i = 1; i <= 100 ; i++){
if(i % 2 == 0)
continue;
sum += i;
}
Isto teria a soma de apenas números ímpares de 1 a 100.
Se você pensa no corpo de um laço como uma sub-rotina, continue
é como return
. A mesma palavra-chave existe em C, e serve o mesmo propósito. Aqui está um exemplo inventado:
for(int i=0; i < 10; ++i) {
if (i % 2 == 0) {
continue;
}
System.out.println(i);
}
Isto imprimirá apenas os números ímpares.
Geralmente, vejo continue
(e break
) como um aviso de que o código pode usar algum refactoring, especialmente se a declaração de laço while
ou for
não estiver imediatamente à vista. O mesmo é verdade para return
no meio de um método, mas por uma razão ligeiramente diferente.
Como outros já disseram, continue
move-se para a próxima iteração do laço, enquanto break
move-se para fora do laço envolvente.
Estas podem ser Bombas de tempo de manutenção porque não há ligação imediata entre a continue
/break
e o laço está continuando/quebrando outro que o contexto; adicione um laço interior ou mova as "entranhas" do laço em um método separado e você tem um efeito oculto do continue
/break
a falhar.
continue
, break
, e return
(exceto o único retorno verdadeiro no final do seu método) todos caem na categoria Geral de "gotos escondidos". Eles colocam o loop e o controle de funções em lugares inesperados, o que eventualmente causa bugs.
Como já mencionado continue
irá ignorar o processamento do código abaixo dele e até ao fim do ciclo. Então, você é movido para a condição do laço e executar a próxima iteração se esta condição ainda se mantém (ou se há uma bandeira, para a condição do laço denotado).
Deve-se destacar que no caso de do - while
Você é movido para a condição no fundo depois de um continue
, não no início do loop.
Random r = new Random();
Set<Integer> aSet= new HashSet<Integer>();
int anInt;
do {
anInt = r.nextInt(10);
if (anInt % 2 == 0)
continue;
System.out.println(anInt);
} while (aSet.add(anInt));
System.out.println(aSet);
*Se a sua resposta for que aSet
conterá números ímpares apenas 100%... estás enganado!
"continuar" em Java significa ir ao fim do ciclo actual, significa: se o compilador vê continuar em um loop ele irá para a próxima iteração
Exemplo: este é um código para imprimir os números ímpares de 1 a 10
O compilador irá ignorar o código de impressão sempre que vir continuar a mover-se para a próxima iteração
for (int i = 0; i < 10; i++) {
if (i%2 == 0) continue;
System.out.println(i+"");
}
Considere uma condição de "se". Uma declaração continue executa o que está lá em uma condição e sai da condição, ou seja, salta para a próxima iteração ou condição. Mas uma pausa deixa o laço. Considere o seguinte programa. '
public class ContinueBreak {
public static void main(String[] args) {
String[] table={"aa","bb","cc","dd"};
for(String ss:table){
if("bb".equals(ss)){
continue;
}
System.out.println(ss);
if("cc".equals(ss)){
break;
}
}
System.out.println("Out of the loop.");
}
}
Vai imprimir: aa cc fora do circuito.
Se utilizar uma interrupção no lugar de continuar(após if.), ele vai apenas imprimir aa e fora do loop .
Se a condição "bb" for igual a ss for satisfeita: Para continuar: vai para iteração seguinte, ou seja, "cc".igual a (ss). Para quebrar: ele sai do loop e imprime "fora do loop. "
Estou um pouco atrasado para a festa, mas ... ..
Vale a pena mencionar quecontinue
é útil para loops vazios onde todo o trabalho é feito na expressão condicional controlando o loop. Por exemplo:
while ((buffer[i++] = readChar()) >= 0)
continue;
Neste caso, todo o trabalho de ler um carácter e adicioná-lo a buffer
é feito na expressão que controla o laço while
. A declaração continue
serve como um indicador visual de que o laço não precisa de um corpo.
while (...)
{ }
E definitivamente melhor (e mais seguro) estilo de codificação do que usar uma declaração vazia como:
while (...)
;
Basicamente em java, continuar é uma declaração. Então a instrução continuar é normalmente usada com os loops para saltar a iteração atual.
Para saber como e quando é usado em java, consulte a ligação abaixo. Tem explicação com exemplo.
Espero que ajude !!