当 while(sc.hasNextLine()) 遇到 EOF 时

when while(sc.hasNextLine()) encounter EOF

提问人:sss lll 提问时间:11/25/2022 最后编辑:Mark Rotteveelsss lll 更新时间:11/25/2022 访问量:24

问:

这是程序:

package IOReview;

import java.util.Scanner;

import static java.lang.Thread.sleep;

public class ThreadTest {
    public static void main(String[] args) {
        new Thread(() -> {
            while (true){
                Scanner sc = new Scanner(System.in);
                StringBuilder builder = new StringBuilder();
                System.out.println("Please Input the text you want:");
                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                //The while loop below  will only execute once,the rest of the program will keep running; 
                while (sc.hasNextLine()) {
                    builder.append(sc.nextLine());
                }
                System.out.println(builder.toString());
            }
        }).start();
    }
}

第二个while循环只会执行一次,当我输入+终止sc.hasNextLine();CtrlD

我想知道为什么 sc.hasNextLine 只会执行一次,但是当我在 IDEA 终端中输入 + 时,程序的其余部分将继续运行。CtrlD

Java IO EOF

评论

0赞 Mark Rotteveel 11/25/2022
你认为有什么作用?while (true)
0赞 sss lll 11/25/2022
while(true) 表示第二个 while(sc.hasNextLine()){} 也会继续运行,但只执行一次:
0赞 Mark Rotteveel 11/25/2022
你终止了标准输入,所以之后,将始终是假的,所以这个循环将不再被输入。一个程序只有一个标准输入,一旦关闭,它就会保持关闭状态。sc.hasNextLine()
1赞 g00se 11/25/2022
看到这个好奇的相关
0赞 Stephen C 11/25/2022
线程在这里应该实现什么?

答: 暂无答案