使用 Scanner.next() 获取文本输入
-
21-08-2019 - |
题
我正在尝试从 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() 方法?我以为它会等待用户输入,但看起来并没有,并抛出异常,说扫描仪中没有留下任何内容。
解决方案
原因的例外是,您所呼叫keyIn.close()
您使用的扫描仪一次后,它不仅关闭Scanner
也System.in
。就在第二天重复创建一个新的Scanner
其及时炸毁了,因为System.in
现已关闭。为了解决这个问题,你应该做你进入while
循环之前,并跳过close()
调用只能创建一个扫描仪,一旦完全,因为你不希望关闭System.in
。
固定的程序仍然不会因为你做的==
和!=
字符串比较的工作后。当比较Java中的字符串必须使用equals()
字符串的内容进行比较。当您使用==
和!=
你是比较对象引用,所以这些比较会永远在你的代码返回false。 始终使用equals()
比较字符串。
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;
}
其他提示
要评估你必须使用.equals字符串
而(!c.equals( “Y”)){做的东西......
在循环之外声明您的扫描仪引用。您不必每次都创建它并关闭它。
将字符串文本与方法进行比较
equals
, ,不与操作员一起==
.
尝试使用nextLine(),并且仅在寻找返回的字符串中的第一个元素。
针对字符或其它原始类型使用时,!=和==只会工作,这将仅在c#工作。您将需要使用.equals以确保您检查适当的平等。
不隶属于 StackOverflow