En Python es un eficiente para los demás implementación del bucle se describe
aquí

Ejemplo de código:

for x in range(2, n):
    if n % x == 0:
        print n, 'equals', x, '*', n/x
        break
else:
    # loop fell through without finding a factor
    print n, 'is a prime number'

En Java tengo que escribir más código para conseguir el mismo comportamiento:

finishedForLoop = true;
for (int x : rangeListOfIntegers){
    if (n % x == 0)
    {
        //syso: Some printing here
        finishedForLoop = false
        break;
    }
}
if (finishedForLoop == true){
    //syso: Some printing here
}

Es la mejor aplicación similar a Python para otro bucle en Java?

  • Puede reemplazar if (finishedForLoop == true) con if (finishedForLoop). No hay necesidad de prueba para true, el if instrucción hace que implícitamente 🙂
InformationsquelleAutor Michael | 2012-10-25

5 Comentarios

  1. 59

    Esto se hace así:

    class A {
        public static void main(String[] args) {
            int n = 13;
            found: {
                for (int x : new int[]{2,3,4,5,6,7,8,9,10,11,12})
                    if (n % x == 0) {
                        System.out.println("" + n + " equals " + x + "*" + (n/x));
                        break found;
                    }
                System.out.println("" + n + " is a prime number");
            }
        }
    }

    $ javac A.java && java A
    13 is a prime number
    • ¿Por qué la etiqueta de break? Sólo hay un bucle de romper.
    • no romper el lazo, pero el que encierra bloque.
    • Para elaborar Eric comentario: una etiqueta salto de continuar en la instrucción que sigue el bucle y todavía flujo a través de la println declaración.
  2. 12

    Cuando tengo que hacer algo como esto, si no se requiere mayor información, yo por lo general trato de dividirlo en un método independiente – que luego pueden volver true/false o, alternativamente, el valor encontrado, o null si no se encuentra. No siempre de trabajo es muy específico al contexto – pero es algo que vale la pena probar.

    A continuación, puedes escribir:

    for (...) {
        if (...) {
           return separateMethod();
        }
    }
    return null; //Or false, or whatever
    • para los casos cuando un método diferente no es lo ideal, siempre se puede «romper» el bucle con el uso de un etiquetado descanso… pero es muy raro ver esto en la práctica.
  3. 3

    No. Que es el más simple. No que complicado, es sólo la sintaxis.

    • además, incluso si usted encuentra algo «simple», que también va a ser «inteligente». Y «smart» es difícil de leer
    • +1, Sí, todavía estoy interesado en más «inteligente» de las soluciones:-)
    • No veo lo que no es inteligente sobre el uso de la mínima de la sintaxis. Para responder a su pregunta directamente, no hay nada más sencillo y no hay nada más inteligente.
  4. 1

    Desde java8 hay una manera de escribir esto con «casi no» código:

    if(IntStream.range(2, n).noneMatch(x -> n % x == 0)) {
       System.out.println(n + " is a prime number");
    }

    PERO: esto sería menos eficiente que el clásico bucle-con-break-y-indicador método.

Dejar respuesta

Please enter your comment!
Please enter your name here