繁体   English   中英

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

[英]Java scanner - can't read user input

我想读取用户输入,例如: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循环并显示“测试”。 我如何阅读该输入?

方法hasNext()工作方式如下:

  • 如果看到文件结尾,则返回false;否则,返回false。
  • 如果看到另一个有效的非空白输入,则返回true;否则,返回true。
  • 如果以上两个都不成立,它将等待用户要输入的下一个输入,并且直到用户输入后才返回。

通常,如果您对文件使用Scanner ,则这样的循环将正常工作,因为文件的末尾有一定的确定性,并且通常不会卡住等待更多的输入。

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

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

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

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

  • 该程序告诉用户输入一些特定的值,该值将告诉用户输入已结束。 例如,字符串“ DONE”。 执行此操作时,必须将循环更改为:

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

您可以根据是否要退出来中断循环,例如

 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");
    }

像这样使用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来为您完成工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM