[英]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()
工作方式如下:
通常,如果您对文件使用Scanner
,则这样的循环将正常工作,因为文件的末尾有一定的确定性,并且通常不会卡住等待更多的输入。
但是,当您使用控制台输入( System.in
,未重定向)时,通常用户不会发送文件结束信号。 他只是按Return键 ,所以hasNext()
坐了hasNext()
,等待用户是否在下一行输入更多输入,依此类推。
有两种一般方法可以解决此问题:
用户必须实际终止输入。 输入完所有数字并按Return键后,还需要发送文件结束序列,通常是ctrl D或ctrl 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.