2011-09-10 18 views
5

Jestem nowy w JAVA i nie jestem pewien, jak złamać pętlę DO WHILE, której używam w poniższym kodzie? Myślałem, że mogę wprowadzić -1, aby przerwać lub wszystkie inne numery, aby kontynuować pętlę.Przerwać DO podczas pętli 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

To nie jest 'DO ... WHILE' jest to pętla 'WHILE'. Łamiesz to, wydając 'break;' w dowolnym miejscu w pętli. – Shef

+0

Trójkąt: http://www.beedictionary.com/common-errors/angel_vs_angle – zengr

Odpowiedz

9

Trzeba użyć .equals() zamiast ==, tak:

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

Podczas korzystania == jesteś sprawdzania równości odniesienia (czyli czy jest to ten sam wskaźnik), ale kiedy używasz .equals(), sprawdzasz równość wartości (tzn. czy wskazują na to samo). Zazwyczaj prawidłowym wyborem jest .equals().

Można również użyć break aby zamknąć pętlę, tak:

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

Jestem trochę zdezorientowany, dlaczego to nie działa z zaledwie ==? –

+3

== porównuje obiekt dla równości odniesienia, czyli czy odnoszą się do * dokładnie * tego samego obiektu? Jeśli mam strukturę, która przechowuje liczbę całkowitą, a mówię, że nowa struktura (4) == nowa struktura (4), będzie to fałsz, ponieważ chociaż zainicjowałem całkowitą strukturę na 4 w obu obiektach, są to różne obiekty. Jednakże, jeśli przeciążam równe (i hashcode, zobacz javadocs) poprawnie, nowa struktura (4) .equals (nowa struktura (4)) będzie drukować prawdziwie - mimo, że są różnymi obiektami, są tym samym, co na ich jest równa umowie. – MetroidFan2002

3

Można użyć break:

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

Nie należy porównywać ciągów, używając zamiast tego słowa "==", ale zamiast niego. ".equals. – Howard

+0

oh przepraszam - nie zauważyłem, że to java, pomyślałem C# –

5

trzeba użyć metody String.equals() podczas porównywania ciągów. Kod value == "-1" jest sprawdzenie równości odniesienia, nie równość wartość