Java Scanner赢得';";“完成”;阅读输入
我在使用java的Scanner类时遇到了问题。我可以让它很好地读取我的输入,但问题是当我想输出一些东西时。给定多行输入,当所有输入都被完全读取时,我只想打印一行。以下是我用于读取输入的代码:Java Scanner赢得';";“完成”;阅读输入,java,while-loop,java.util.scanner,Java,While Loop,Java.util.scanner,我在使用java的Scanner类时遇到了问题。我可以让它很好地读取我的输入,但问题是当我想输出一些东西时。给定多行输入,当所有输入都被完全读取时,我只想打印一行。以下是我用于读取输入的代码: public static void main(String[] args){ Scanner scanner = new Scanner(System.in); //scanner reads block of input while(scanner.hasNextLine(
public static void main(String[] args){
Scanner scanner = new Scanner(System.in); //scanner reads block of input
while(scanner.hasNextLine()){
//body of loop goes here
String s = scanner.nextLine();
Scanner ls = new Scanner(s); //scanner to parse a line of input
while(ls.hasNext()){
//body of nested loop goes here
ls.next();
}
}
System.out.println("Fin");
}
即使读取了所有输入行,程序也不会到达System.out.println消息。(请注意,消息不能转到其他任何地方,否则它将输出循环运行的次数)。我该如何解决这个问题?如果有任何帮助,我们将不胜感激。在这种情况下,您正在阅读无限流<如果此扫描仪的输入中有另一行,则code>hasNextLine()将继续返回true。由于它是一个
系统。在
中,它将继续从键盘读取,除非您终止它或告诉流停止
最后按“ctrl+Z”,您将看到它工作正常
编辑:您可以这样做
Scanner scanner = new Scanner(System.in); //scanner reads block of input
int BLOCK_SIZE =3,count=1;
while(scanner.hasNextLine()){
//body of loop goes here
String s = scanner.nextLine();
Scanner ls = new Scanner(s); //scanner to parse a line of input
while(ls.hasNext()){
//body of nested loop goes here
ls.next();
}
if(count++==BLOCK_SIZE)
{
break;
}
}
System.out.println("Fin");
}
正如我在你的外环中看到的,你已经使用了
scanner.hasNextLine();
方法。如果必须等待输入,此方法将被阻止。你也有
Scanner scanner = new Scanner(System.in);
声明。因此system.in将一直等待输入,因此hasNextLine()方法必须等待输入。
这就是为什么控制卡在循环中,无法继续
要修复它,您可以首先将输入存储在字符串变量中,然后调用扫描器构造函数。您需要告诉程序将不再有输入。这是通过附加一个EOF字符来完成的。这可以在Linux上通过在控制台中按Ctrl-D手动完成。我认为在Windows上可以按Ctrl-Z。如果您将输入从一个程序传输到另一个程序,则流将自动关闭 例如 魔术
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
就是永远不会停止从系统输入(除非您使用ctrl+d(对于Mac)关闭输入)
要停止循环,我建议在条件中抛出比hasNextLine()更多的内容
例如
Scanner Scanner=新的扫描仪(System.in)//扫描仪读取输入块
int BLOCK_SIZE=3,count=1;
while(scanner.hasNextLine()&&count++你能在两个while循环中放入一些错误检查打印,并告诉我它卡在哪一个循环中吗?我尝试在每个循环中放入打印,但它似乎不是无限循环,而是更像外部while循环无限等待更多输入有人在下面找到了。可能的重复,那么有什么方法可以进行编程吗一旦所有的输入都被读取,它就停止读取?你的程序如何知道它现在应该停止?它不知道,这就是问题所在。当我想在所有的输入都被读取后再输出时,它只是一直在等待另一行输入。如果我有一个输入块,比如说3行文本,我希望它在读取后停止第三行,但是我应该在字符串变量中存储什么呢?程序必须从控制台读取,如果我将输入行保存到字符串中,程序不会仍然等待新的输入行吗?这毫无意义。布尔属性的计算结果总是为真有什么意义。有些东西没有加起来。我缺少什么?@NathanToul伯特:你说得对,我7年前写了这个答案,我一直在跟踪询问者的现有代码。如果你打算终止系统输入,你只需要hasNextLine
。
Scanner scanner = new Scanner(System.in);
while(scanner.hasNextLine()){
Scanner scanner = new Scanner(System.in); //scanner reads block of input
int BLOCK_SIZE =3,count=1;
while(scanner.hasNextLine() && count++ <= BLOCK_SIZE){ //<- Use count here.
//body of loop goes here
String s = scanner.nextLine();
Scanner ls = new Scanner(s); //scanner to parse a line of input
while(ls.hasNext()){
//body of nested loop goes here
ls.next();
}
}
System.out.println("Fin");
}