Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java扫描仪-无法读取用户输入_Java - Fatal编程技术网

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

Java扫描仪-无法读取用户输入,java,Java,我想阅读用户输入,比如:111213141516 Scanner sc = new Scanner(System.in); while(sc.hasNext()){ System.out.println(sc.next()); } System.out.println("Test"); 但它会退出while循环并打印测试。 我怎样才能读懂输入 您可以中断循环,具体取决于您是否想退出,例如: public static void main(String

我想阅读用户输入,比如:111213141516

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

    }
    System.out.println("Test");
但它会退出while循环并打印测试。
我怎样才能读懂输入

您可以中断循环,具体取决于您是否想退出,例如:

 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,它将为您完成这项工作。

该方法的下一步工作如下:

如果它看到文件的结尾,则返回false; 如果它看到另一个有效的非空白输入,则返回true; 如果以上两项都不正确,它将等待用户要输入的下一个输入,直到用户输入后才返回。 通常,如果您使用文件扫描程序,这样的循环将正常工作,因为文件有一个明确的结尾,并且通常不会在等待更多输入时卡住

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

处理这一问题有两种一般方法:

用户必须实际终止输入。输入完所有号码并按Return键后,还需要发送文件结尾序列,通常是ctrlD或ctrlZ

如果您这样做,您将无法向该程序输入更多的输入

程序告诉用户输入某个特定值,该值将告诉用户输入结束。例如,字符串DONE。执行此操作时,必须将循环更改为以下内容:

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

你输入后按回车键了吗?是的,我是。。它打印出sc.next,但只是停止,不退出while循环以打印测试如果不使用特定的终止代码,您将无法退出此循环。System.in总是请求更多的输入,因此sc.hasNext总是true。有两件事:变量称为aba,而不是abc:P。您可以添加信息,任何非数字输入也会终止循环。因此,0的检查可能没有必要作为终止条件。@Tom谢谢我修改了它。我同意输入其他非数值,但我认为用不必要的解释来迷惑新手不是个好主意。