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

时间:2009-07-02 00:26:08

标签: java java.util.scanner

我正在尝试从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()方法?我认为它会等待用户输入,但它看起来不是,并抛出异常,说扫描仪中没有任何东西。

4 个答案:

答案 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来确保检查是否正确相等。