1

我对 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”表示否时,我应该怎么做才能完成循环?

4

6 回答 6

10

一个问题是:

sc.next() == "n"

应该

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

String比较应该使用而不是 == (字符串文字比较除外),并且遵循java 代码约定equals()总是更好。

于 2012-12-28T18:05:13.737 回答
3

将其更改为

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

除了检查 java 编码约定之外,变量名遵循驼峰式大小写

于 2012-12-28T18:05:19.603 回答
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")如果你想比较它们的引用使用==

于 2012-12-28T18:09:50.223 回答
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');

此外,现在是开始搞清楚输入验证的好时机。

并且不要忘记关闭扫描仪。

于 2012-12-28T19:00:33.547 回答
0

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

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

请记住,用户可能会回答“N”。上面的方法返回一个布尔变量的布尔值,所以你没问题,你的代码尽可能简单。

于 2012-12-28T18:16:08.557 回答
0

这将检查输入字符串是否以 n ExitLoop = sc.next().toLowerCase().startsWith("n"); 开头 // 或者您可能想尝试通过执行 ExitLoop = sc.next().toLowerCase().equals("n"); 来忽略大小写

于 2012-12-28T19:07:31.217 回答