Java扫描程序 - 无法读取用户输入

时间:2014-12-21 13:48:07

标签: java

我想阅读用户输入,如:11 12 13 14 15 16

Scanner sc = new Scanner(System.in);
    while(sc.hasNext()){
        System.out.println(sc.next());

    }
    System.out.println("Test");

但是它更新于while循环并打印"测试"。 我怎么能读到那个输入?

3 个答案:

答案 0 :(得分:2)

方法hasNext()的工作原理如下:

  • 如果它看到文件的结尾,则返回false;
  • 如果它看到另一个有效的非空白输入,则返回true;
  • 如果以上两种情况均属实,则等待用户输入的下一个输入,并且直到他输入为止。

通常,如果你对文件使用Scanner,这样的循环将正常工作,因为文件有一个明确的结束,它通常不会卡在等待更多的输入。

但是当您使用控制台输入(System.in,而不是重定向)时,通常用户不会发送文件结束信号。他只按 Return ,所以,hasNext()坐下来等待用户是否会在下一行输入更多输入,依此类推。

有两种一般方法可以解决这个问题:

  • 用户必须实际终止输入。输入完所有数字并按返回后,还需要发送文件结束序列,通常是 ctrl D ctrl Z

    如果您这样做,您将无法再输入该程序。

  • 程序告诉用户输入一些特定的值,告诉它输入结束。例如,字符串" DONE"。当你这样做时,你必须将循环更改为:

    String nextInput;
    while( sc.hasNext() && ! (nextInput = sc.next()).equals( "DONE" ) ){
        System.out.println(nextInput);
    }
    

答案 1 :(得分:1)

根据您是否要退出,您可以打破循环。

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String next = sc.next();

            if (next.equals("q")) { //if user press q then break the loop
                break;
            }
            System.out.println(next);

        }
        System.out.println("Test");
    }

答案 2 :(得分:1)

使用api:

while(sc.hasNextInt()){
    int aba= sc.nextInt();
    if (aba == 0) {//or even non numeric value here would let this loop exit
        break;
    }
}

所以你需要输入0或者甚至以其他方式输入非数值以便退出循环。 nextLine方法只读取整行一次,然后你需要解析它然后转换为整数,这样才能使用sc.nextInt,这将为你完成工作。