Java 使用Scanner.next()获取文本输入

Java 使用Scanner.next()获取文本输入,java,java.util.scanner,Java,Java.util.scanner,我正在尝试用Java6从键盘获取文本输入。我是该语言的新手,每当我运行以下代码时,都会出现以下错误: 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";

我正在尝试用Java6从键盘获取文本输入。我是该语言的新手,每当我运行以下代码时,都会出现以下错误:

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()方法?我以为它会等待用户输入,但看起来不是,并抛出异常,表示扫描仪中没有任何内容。

尝试使用nextLine()并仅查看返回的字符串中的第一个元素

那个!=and==仅在用于字符或其他原语类型时有效,而这些字符或原语类型仅在c#中有效。您需要使用.equals来确保检查是否正确相等

  • 在循环外部声明扫描仪引用。您不必每次都创建并关闭它

  • 将字符串文本与方法
    equals
    进行比较,而不是与运算符
    =
    进行比较


要计算字符串,必须使用.equals


当(!c.equals(“y”){do stuff…

出现异常的原因是您正在调用
keyIn.close()
使用扫描仪一次后,它不仅关闭了
扫描仪
,而且还关闭了
系统。在
中。下一次迭代中,您将创建一个新的
扫描仪
,该扫描仪会立即爆炸,因为
系统现在关闭。
中现在关闭了。要解决这个问题,您只需在输入
时创建一个扫描仪即可ode>循环,并完全跳过
close()
调用,因为您不想关闭
System.in

修复后,程序仍然无法工作,因为您执行了
==
!=
字符串比较。在Java中比较字符串时,必须使用
equals()
比较字符串内容。当您使用
=
!=
时,您正在比较对象引用,因此这些比较在代码中总是返回false


你的代码到底在做什么?输入是什么?所有这些都是试图让用户输入“y”或“n”,如果它的“y”继续循环,否则退出。无论我按哪个字母,错误都会发生。非常感谢,这个答案也解决了我的问题!我不知道“in.close();”也会关闭“system.in”!
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;
}