¿Qué es la palabra clave "continuar" y cómo funciona en Java?


302

Vi esta palabra clave por primera vez y me preguntaba si alguien podría explicarme lo que hace.

  • ¿Cuál es la continuepalabra clave?
  • ¿Como funciona?
  • Cuando se usa

Respuestas:


416

Una continuedeclaración sin una etiqueta se volverá a ejecutar desde la condición de la interna whileo dobucle y de la expresión de actualización de la más interna forde bucle. A menudo se usa para terminar anticipadamente el procesamiento de un ciclo y, por lo tanto, evitar ifdeclaraciones profundamente anidadas . En el siguiente ejemplo continueobtendrá la siguiente línea, sin procesar la siguiente instrucción en el bucle.

while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

Con una etiqueta, continuese volverá a ejecutar desde el bucle con la etiqueta correspondiente, en lugar del bucle más interno. Esto se puede usar para escapar de bucles profundamente anidados, o simplemente para mayor claridad.

A veces continuetambién se usa como marcador de posición para aclarar un cuerpo de bucle vacío.

for (count = 0; foo.moreData(); count++)
  continue;

La misma declaración sin una etiqueta también existe en C y C ++. El equivalente en Perl es next.

No se recomienda este tipo de flujo de control, pero si así lo desea también se puede utilizar continuepara simular una forma limitada de goto. En el siguiente ejemplo continue, volverá a ejecutar el for (;;)bucle vacío .

aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;

513

continuees algo así como goto. ¿Estás familiarizado con break? Es más fácil pensar en ellos en contraste:

  • break termina el ciclo (salta al código debajo de él).

  • continue termina el resto del procesamiento del código dentro del ciclo para la iteración actual, pero continúa el ciclo.


1
buen ejemplo para descansar y continuar, pensé que era lo mismo antes>. <
yfsx

¡Imposible no convertirlo en un bonito 500 perfecto! +1
sombrero

100

Veamos un ejemplo:

int sum = 0;
for(int i = 1; i <= 100 ; i++){
    if(i % 2 == 0)
         continue;
    sum += i;
}

Esto obtendría la suma de solo números impares del 1 al 100.


28

Si piensas en el cuerpo de un bucle como una subrutina, continuees algo así return. La misma palabra clave existe en C y tiene el mismo propósito. Aquí hay un ejemplo artificial:

for(int i=0; i < 10; ++i) {
  if (i % 2 == 0) {
    continue;
  }
  System.out.println(i);
}

Esto imprimirá solo los números impares.


16

En general, veo continue(y break) como una advertencia de que el código podría usar alguna refactorización, especialmente si la declaración whileo forloop no está a la vista de inmediato. Lo mismo es cierto returnen el medio de un método, pero por una razón ligeramente diferente.

Como ya han dicho otros, continueavanza a la siguiente iteración del bucle, mientras que breaksale del bucle de cierre.

Estos pueden ser bombas de tiempo de mantenimiento porque no existe un vínculo inmediato entre el continue/ breaky el ciclo que continúa / se rompe aparte del contexto; agregue un bucle interno o mueva las "tripas" del bucle a un método separado y tendrá un efecto oculto de continue/ breakfallar.

En mi humilde opinión, es mejor usarlos como medida de último recurso, y luego asegurarse de que su uso se agrupe estrechamente al principio o al final del ciclo para que el próximo desarrollador pueda ver los "límites" del ciclo en una pantalla .

continue, breaky return(aparte del One True Return al final de su método) todos caen en la categoría general de "GOTO ocultos". Colocan el control de bucle y función en lugares inesperados, lo que eventualmente causa errores.


Estoy interesado en la razón por la cual el retorno es malo. Ya tengo la sensación de que el retorno es malo porque Scala no fomenta los retornos .
Jus12

1
Por otro lado, permitir que un método regrese de un bucle profundamente anidado podría ser la forma más fácil, más legible y más razonable de hacer las cosas, en lugar de crear variables adicionales solo para que la salida del bucle se vea más limpia.
David R Tribble

5

"continuar" en Java significa ir al final del ciclo actual, significa: si el compilador ve continuar en un ciclo, pasará a la siguiente iteración

Ejemplo: este es un código para imprimir los números impares del 1 al 10

el compilador ignorará el código de impresión cada vez que vea continuar moviéndose a la siguiente iteración

for (int i = 0; i < 10; i++) { 
    if (i%2 == 0) continue;    
    System.out.println(i+"");
}


4

Como ya se mencionó continue, omitirá el procesamiento del código debajo y hasta el final del ciclo. Entonces, te trasladan a la condición del bucle y ejecuta la siguiente iteración si esta condición aún se mantiene (o si hay un indicador, a la condición del bucle denotado).

Debe resaltarse que en el caso de do - whileque se traslade a la condición en la parte inferior después de uncontinue , no al comienzo del bucle.

Es por eso que muchas personas no responden correctamente lo que generará el siguiente código.

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

* Si su respuesta es que aSetcontendrá números impares solo 100% ... ¡está equivocado!


4

Continuar es una palabra clave en Java y se usa para omitir la iteración actual.

Suponga que desea imprimir todos los números impares del 1 al 100

public class Main {

    public static void main(String args[]) {

    //Program to print all odd numbers from 1 to 100

        for(int i=1 ; i<=100 ; i++) {
            if(i % 2 == 0) {
                continue;
            }
            System.out.println(i);
        }

    }
}

La instrucción continue en el programa anterior simplemente omite la iteración cuando soy par e imprime el valor de i cuando es impar.

La instrucción Continuar simplemente lo saca del ciclo sin ejecutar las declaraciones restantes dentro del ciclo y desencadena la siguiente iteración.


3

Considere una condición If Else. Una instrucción continue ejecuta lo que hay en una condición y sale de la condición, es decir, salta a la siguiente iteración o condición. Pero un descanso deja el círculo. Considere el siguiente 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.");
    }

}

Imprimirá: aa cc Fuera del bucle.

Si usa break en lugar de continue (After if.), Solo imprimirá aa y saldrá del bucle .

Si se cumple la condición "bb" igual a ss: Para continuar: pasa a la siguiente iteración, es decir, "cc" .equals (ss). Para descanso: sale del bucle e imprime "Fuera del bucle".


2
Estoy bastante seguro de que también imprimiría cc desde "cc"! = "Bb" y la declaración de impresión está antes delbreak
Ted Delezene

2

Llego un poco tarde a la fiesta, pero ...

Vale la pena mencionar que continuees útil para bucles vacíos donde todo el trabajo se realiza en la expresión condicional que controla el bucle. Por ejemplo:

while ((buffer[i++] = readChar()) >= 0)
    continue;

En este caso, todo el trabajo de leer un personaje y agregarlo se bufferrealiza en la expresión que controla el whilebucle. La continuedeclaración sirve como un indicador visual de que el ciclo no necesita un cuerpo.

Es un poco más obvio que el equivalente:

while (...)
{ }

y definitivamente un estilo de codificación mejor (y más seguro) que usar una declaración vacía como:

while (...)
    ;

Definitivamente estoy de acuerdo en que es un código más limpio y más legible, pero no estoy seguro de seguir su argumento sobre que es "más seguro" que la otra opción, mientras que (declaración); delimitado directamente usando un punto y coma.
axolotl

@Aalok: es más seguro porque un punto y coma solitario es fácil de perder visualmente. También es fácil omitirlo accidentalmente, lo que haría que la siguiente declaración se whileconvirtiera en el cuerpo de la whilecláusula, y que no sería visualmente obvio. Un explícito continuees obvio y transmite una intención que no hace una declaración vacía.
David R Tribble

Ya veo, así que te refieres principalmente desde una perspectiva de diseño. Eso tiene sentido. Tenía algo subyacente con la forma en que está estructurado el ciclo en mente.
axolotl

1

Básicamente en Java, continuar es una declaración. Por lo tanto, la instrucción continue se usa normalmente con los bucles para omitir la iteración actual.

Para saber cómo y cuándo se usa en Java, consulte el enlace a continuación. Tiene explicación con ejemplo.

https://www.flowerbrackets.com/continue-java-example/

Espero eso ayude !!


0

continue debe estar dentro de un bucle. De lo contrario, se muestra el siguiente error:

Continuar fuera del circuito


0

La instrucción continue se usa en la estructura de control de bucle cuando necesita saltar a la siguiente iteración del bucle de inmediato.

Se puede usar con for loop o while loop. La instrucción Java continue se usa para continuar el ciclo. Continúa el flujo actual del programa y omite el código restante en la condición especificada.

En caso de un bucle interno, continúa solo el bucle interno.

Podemos usar la instrucción Java continue en todos los tipos de bucles, como for loop, while loop y do-while loop.

por ejemplo

class Example{
    public static void main(String args[]){
        System.out.println("Start");
        for(int i=0; i<10; i++){
            if(i==5){continue;}
            System.out.println("i : "+i);   
        }
        System.out.println("End.");
    }
}

salida:

Start
i : 0
i : 1
i : 2
i : 3
i : 4
i : 6
i : 7
i : 8
i : 9
End.

[número 5 es saltar]

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.