2011-09-10 21 views
5

Soy nuevo en JAVA y no estoy seguro de cómo romper el ciclo DO WHILE que uso en mi código a continuación? Pensé que podría ingresar -1 para romper o todos los otros números para continuar el ciclo.Romper DO While Loop Java?

import javax.swing.*; 
public class Triangel { 

public static void main(String[] args) { 

int control = 1; 

while (control == 1){ 

    String value = JOptionPane.showInputDialog("Enter a number or -1 to stop"); 

    if(value == "-1"){ 
     control = 0; 
    } 
System.out.println(value); 
} 

} 

}

+3

Esto no es un 'DO ... WHILE' loop, este es un ciclo 'WHILE'. La rompes emitiendo 'break;' en cualquier lugar dentro del ciclo. – Shef

+0

Triángulo: http://www.beedictionary.com/common-errors/angel_vs_angle – zengr

Respuesta

9

Es necesario utilizar en lugar de .equals()==, así:

if (value.equals("-1")){ 
    control = 0; 
} 

Cuando se utiliza == se esté examinando la igualdad de referencia (es decir, ¿es éste el mismo puntero), pero cuando usa .equals() está comprobando la igualdad de valores (es decir, apuntan a lo mismo). Normalmente, .equals() es la elección correcta.

También puede utilizar break para salir de un bucle, así:

while(true) { 
    String value = JOptionPane.showInputDialog("Enter a number or -1 to stop"); 
    System.out.println(value); 
    if ("-1".equals(value)) { 
     break; 
    } 
} 
+1

Estoy un poco confundido por qué no funciona con solo ==? –

+3

== compara un objeto para la igualdad de referencia, es decir, ¿se refieren al mismo objeto * exacto *? Si tengo una estructura que contiene un entero, y digo nueva Estructura (4) == nueva Estructura (4), esto será falso porque, aunque he inicializado el entero de la estructura a 4 en ambos objetos, son objetos diferentes. Sin embargo, si sobrecargamos equals (y hashcode, see the javadocs) correctamente, la nueva Structure (4) .equals (new Structure (4)) se imprimirá como verdadera, aunque sean objetos diferentes, son lo mismo que por su es igual a contrato – MetroidFan2002

3

Puede utilizar break:

while (true) { 
    ... 
    if ("-1".equals(value)) { 
     break; 
    } 
    ... 
} 
+0

No compare cadenas utilizando '==' pero '.equals' en su lugar. – Howard

+0

oh lo siento - no noté que esto era java, pensé C# –

5

Es necesario utilizar el método String.equals() al comparar cadenas. Su código value == "-1" está comprobando la igualdad de referencia, no valoran la igualdad