我是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”表示没有时,我该怎么做才能完成循环?
答案 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”);