java.util.Scanner不返回到提示 - java

import java.util.Scanner;

class newClass {
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        while (s.hasNext()) {
            System.out.println(s.next());
        }
        s.close();
    }
}

该程序不会返回提示(我已经通过终端运行了)。这是为什么?我该如何纠正?

参考方案

该程序不会返回提示(我已经通过终端运行了)。这是为什么?

因为s.hasNext()将阻塞直到有更多输入可用为止,并且仅在遇到流末尾时才返回false。

从文档:

如果此扫描程序的输入中包含另一个令牌,则返回true。等待输入扫描时,此方法可能会阻塞。

在Unix系统上,您可以通过键入Ctrl + D结束流,而Ctrl + D可以正确地将控制权返回给提示符(或通过键入Ctrl + C终止整个程序)。

我该如何纠正?

你可以

按照JJ的建议,保留一些用于终止程序的输入字符串,或者
您可以依靠用户使用Ctrl + D关闭输入流,也可以
将循环包含在try / catch中,并让另一个线程中断主线程,然后该主线程正常退出。
从另一个线程以编程方式执行System.in.close()

java.util.HashSet是否不遵循其规范? - java

作为相对的Java noob,我很困惑地发现以下内容:Point.java:public class Point { ... public boolean equals(Point other) { return x == other.x && y == other.y; } ... } Edge.java:public class Edge…

停止扫描程序读取用户输入的Java? - java

我正在尝试编写此方法,该方法将不断从用户那里读取内容,直到输入单词“ exit”为止。我尝试了一个for和break循环;它没有用。我尝试了一段时间,但即使输入了“退出”一词,它也不会停止。任何想法如何解决这一问题?谢谢。public void read(Scanner scanner){ while(3<4){ String in = scanner…

DefaultThreadFactory本身是线程安全的吗? - java

Java Executor框架提供用于创建线程的DefaultThreadFactory。DefaultThreadFactory本身对于多个线程并发使用是否安全?还是我必须注意每个线程只有一个DefaultThreadFactory?我知道通常最好的做法是仅从一个“主”线程启动新线程,但让我们假设一个预先存在的代码库。如果答案中包含简短的解释,说明为什么您…

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…