我正在尝试从Java 6中的键盘输入文本。我是该语言的新手,每当我运行以下代码时,我都会收到此错误:
package test1;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
boolean quit = false;
while (!quit){
Scanner keyIn;
String c = "x";
while (c != "y" && c != "n") {
keyIn = new Scanner(System.in);
c = keyIn.next();
keyIn.close();
}
if (c == "n")
quit = true;
}
}
}
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:838)
at java.util.Scanner.next(Scanner.java:1347)
at test1.Test.main(Test.java:11)
我是否误用了next()方法?我认为它会等待用户输入,但它看起来不是,并抛出异常,说扫描仪中没有任何东西。
答案 0 :(得分:8)
异常的原因是您在使用扫描仪一次后拨打keyIn.close()
,这不仅会关闭Scanner
,还会关闭System.in
。在下一次迭代中,您创建了一个新的Scanner
,它会立即爆炸,因为System.in
现已关闭。要解决此问题,您应该做的只是在输入while
循环之前创建一次扫描程序,并完全跳过close()
调用,因为您不想关闭System.in
。< / p>
在修复程序后,由于==
和!=
字符串比较,程序仍无效。在比较Java中的字符串时,必须使用equals()
来比较字符串内容。当您使用==
和!=
时,您正在比较对象引用,因此这些比较将始终在代码中返回false。 Always use equals()
to compare strings.
while (!quit){
Scanner keyIn = new Scanner(System.in);
String c = "x";
while (!c.equals("y") && !c.equals("n")) {
c = keyIn.next();
}
if (c.equals("n"))
quit = true;
}
答案 1 :(得分:2)
评估您必须使用的字符串.equals
while(!c.equals(“y”)){做东西......
答案 2 :(得分:1)
在循环外声明您的扫描仪参考。你不必每次都创建并关闭它。
将字符串文字与方法equals
进行比较,而不是与运算符==
进行比较。
答案 3 :(得分:0)
尝试使用nextLine()并仅查看返回的字符串中的第一个元素。
!=和==仅在用于字符或其他原始类型时才有效,只能在c#中使用。您需要使用.equals来确保检查是否正确相等。