打破Java中的DO While循环?

8

我刚接触JAVA,不确定如何中断下面代码中使用的DO WHILE循环。我以为我可以输入-1来中断,或者输入其他数字来继续循环。

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

}

}


5
这不是一个“DO... WHILE”循环,而是一个“WHILE”循环。只要在循环内部任何地方发出“break;”指令,就可以终止循环。 - Shef
三角形:http://www.beedictionary.com/common-errors/angel_vs_angle - zengr
3个回答

14

你需要使用.equals()而不是==,写成这样:

if (value.equals("-1")){
    control = 0;
}
当你使用==时,你正在检查引用相等性(即这是同一个指针),但当你使用.equals()时,你正在检查值相等性(即它们是否指向相同的东西)。通常.equals()是正确的选择。 你也可以使用break退出循环,如下所示:
while( true ) {
    String value = JOptionPane.showInputDialog( "Enter a number or -1 to stop" );
    System.out.println( value );
    if ( "-1".equals(value) ) {
        break;
    }
}

3
该方法用于比较对象是否引用相同,也就是它们是否指向完全相同的对象?如果我有一个包含整数的结构体,并且我说new Structure(4) == new Structure(4),那么结果为false,因为尽管我在两个对象中都初始化了结构体的整数为4,但它们是不同的对象。但是,如果我适当地重载equals(和hashcode,详见javadocs),则new Structure(4).equals(new Structure(4))将输出true - 即使它们是不同的对象,但根据它们的equals合同,它们是相同的东西。 - MetroidFan2002

5

在比较字符串时,您需要使用String.equals()方法。您的代码value == "-1"检查的是引用相等性,而不是值相等性。


3
您可以使用break
while (true) {
    ...
    if ("-1".equals(value)) {
        break;
    }
    ...
}

不要使用==来比较字符串,而是应该用.equals - Howard
哦,抱歉 - 没注意到这是Java,以为是C#。 - Petar Ivanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接