虽然循环没有完成

时间:2012-12-28 18:04:29

标签: java eclipse while-loop

我是Java的新手,我开始使用一些简单的控制台应用程序。

这是我当前的应用程序代码:

Scanner sc = new Scanner(System.in);
boolean ExitLoop = false;
ArrayList<Integer> IDs = new ArrayList<Integer>();
ArrayList<Double> averages = new ArrayList<Double>();
while(!ExitLoop)
{
    System.out.println("StudentID: ");
    IDs.add(sc.nextInt());
    System.out.println("Average: ");
    averages.add(sc.nextDouble());
    System.out.println("Do you want to register another student? [y/n] ");
    ExitLoop = (sc.next() == "n");
}

很抱歉问这么愚蠢的问题,但我真的陷入了这个问题,我点击了“n”,但是while循环没有停止,并继续工作。我做错了什么吗?当用户输入“n”表示没有时,我该怎么做才能完成循环?

6 个答案:

答案 0 :(得分:10)

一个问题是:

sc.next() == "n"

应该是

sc.next().equals("n")

String比较应使用equals()而不是==(字符串文字比较除外),并且最好遵循java code conventions

答案 1 :(得分:3)

将其更改为

sc.next().equals("n")

除了检查java编码约定之外,变量名遵循驼峰的情况

答案 2 :(得分:2)

试试这个

   Scanner sc = new Scanner(System.in);
            boolean ExitLoop = false;
            ArrayList<Integer> IDs = new ArrayList<Integer>();
            ArrayList<Double> averages = new ArrayList<Double>();
            while(!ExitLoop)
            {
                System.out.println("StudentID: ");
                IDs.add(sc.nextInt());
                System.out.println("Average: ");
                averages.add(sc.nextDouble());
                System.out.println("Do you want to register another student? [y/n] ");
                 if(sc.next().equals("n")){
                         ExitLoop = true;
                 }
            }

另请注意,在java中,如果要比较字符串的值,请使用.equals("somevaluhere"),如果要比较其引用用途==

答案 3 :(得分:1)

我会谨慎使用.equals(“n”)主要是因为它比较整个字符串。如果用户输入整个单词“no”怎么办?这也将导致循环的继续。使用之前使用的==运算符没有任何问题,您只需要确定它的比较结果。它适用于char,而不是char vs String或String vs String。对我来说,更好的实施方式是:

exitLoop = sc.next().charAt(0) == 'n';

甚至更好:

exitLoop = (sc.next().charAt(0) == 'n' || sc.next().charAt(0) == 'N');

此外,现在是开始计算输入验证的好时机。

不要忘记关闭扫描仪。

答案 4 :(得分:0)

如果用户回答“n”,你想离开循环,所以你应该写

 ExitLoop=sc.next().equals("n");

并记住用户可以回答“N”。 上面的方法返回一个布尔变量的布尔值,这样你就可以了,你的代码也尽可能简单。

答案 5 :(得分:0)

这将检查输入字符串是否以n开头 ExitLoop = sc.next()。toLowerCase()。startsWith(“n”); // 或者你可能想尝试忽略大小写 ExitLoop = sc.next()。toLowerCase()。equals(“n”);