Java 我不能理解扫描仪,或者我应该说是控制台的输入

Java 我不能理解扫描仪,或者我应该说是控制台的输入,java,console,Java,Console,我不能理解扫描仪,或者我应该说是控制台的输入 public class Calculate { public static void main(String[] args) throws IOException { System.out.println("enter the lines"); Scanner s = new Scanner(System.in); ArrayList<String> result = new

我不能理解扫描仪,或者我应该说是控制台的输入

public class Calculate {

    public static void main(String[] args) throws IOException {
        System.out.println("enter the lines");
        Scanner s = new Scanner(System.in);
         ArrayList<String> result = new ArrayList<String>();
         String line = "";
         while((line = s.nextLine()) != null) {
             result.add(line);
         }
         for(String ss : result){
             System.out.println(ss);
         }
    }
}

Console :
enter the lines
[Inputs on console:]
aa
bb
cc
公共类计算{
公共静态void main(字符串[]args)引发IOException{
System.out.println(“输入行”);
扫描仪s=新的扫描仪(System.in);
ArrayList结果=新建ArrayList();
字符串行=”;
而((line=s.nextLine())!=null){
结果。添加(行);
}
for(字符串ss:result){
系统输出打印LN(ss);
}
}
}
慰问:
输入行
[控制台上的输入:]
aa
bb
复写的副本
当我在调试模式下运行时,字符串aa和bb被添加到列表结果中,但当从扫描仪读取cc时,它不会被添加到列表中 我不确定,我错过了什么。在我看来很傻,但我无法思考我缺少了什么

此(稍微)修改的代码按预期工作(您可以通过输入空字符串退出程序):

publicstaticvoidmain(字符串[]args){
System.out.println(“输入行”);
扫描仪s=新的扫描仪(System.in);
ArrayList结果=新建ArrayList();
字符串行=”;
而((line=s.nextLine())!=null){
如果(line.isEmpty())中断;
结果。添加(行);
}
for(字符串ss:result){
系统输出打印LN(ss);
}
}

它准确地输出输入的内容。

同意,这是一个愚蠢的问题,但我无法思考:(你的代码不应该打印任何内容,因为
循环将不会退出(你不能在控制台中输入
null
)。我会使用
hasNextLine()
while(true){line=s.nextLine();…
因为
hasNextLine
在控制台上总是会返回true。@Naroji您输入了
aa bb cc
?谢谢,我没有输入最后一个,完成了,现在它工作了。但是为什么我们需要输入最后一个enter>来进行设置呢EOF@Naroji您需要一种退出
while
循环的方法。在您的代码中,没有任何东西比程序更重要从未打印过任何内容。我添加了:
if(line.isEmpty())break;
以在用户输入空行时退出while循环。您可以将其更改为您想要的任何内容,但必须有其他内容,否则程序无法知道您何时输入完输入。。。
public static void main(String[] args) {
    System.out.println("enter the lines");
    Scanner s = new Scanner(System.in);
    ArrayList<String> result = new ArrayList<String>();
    String line = "";
    while ((line = s.nextLine()) != null) {
        if (line.isEmpty()) break;
        result.add(line);
    }
    for (String ss : result) {
        System.out.println(ss);
    }
}