gpt4 book ai didi

java - 如何清除标准输入(术语)

转载 作者:行者123 更新时间:2023-12-01 14:44:00 28 4
gpt4 key购买 nike

如何清除Java中的标准输入(术语)?

一点历史:我正在编写一个“反射”程序,算法非常简单:

wait a random amount of time
print "press enter"
read line

重点是,如果用户错误地按下了回车键,则会读取到测试结果,从而导致测试错误。我的目标是纠正这个错误。为此,我想要一个像这样的算法:

wait a random amount of time
clear stdin
print "press enter"
read line

但我找不到办法做到这一点。 This post似乎很有趣:available获取剩余字符数和 skip将跳过它们。只在纸上工作。如果您通过多次按 Enter 键来强调应用程序,available方法返回

an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking

所以,有时,返回值是错误的,至少一个回车符保留在缓冲区中,并且错误仍然存​​在。

This solution可能可以解决问题,但它依赖于平台,我不想这样做。此外,从 Java 调用系统例程是一个非常糟糕的主意。

要恢复,我想清除程序的标准输入,但我不想关闭它,也不想阻止我的程序等待用户提供输入。这对我来说似乎是一个非常基本的问题,如果答案是显而易见的,我会感到羞愧!

最佳答案

我没有“清除标准输入”的答案。我认为这是特定于操作系统的,甚至可能不值得尝试。

但是为了解决您的问题,您可以使用 java.util.Timer 在某个随机时间提示用户。这将在单独的线程中运行。当您的用户最终按下 Enter 键时,检查是否已提示他/她。

下面的代码示例将在 5 秒后打印“Press Enter”。主线程立即阻塞等待用户输入,如果过早按下 Enter 会这样说,因为 boolean 开关尚未打开

*注意:TimerTest 是我摆弄的类的名称。请随意将其更改为您的类(class)名称

static boolean userPrompted = false;

public static void main(String[] args) throws IOException {

// Setup a 5 second timer that prompts the user and switch the userPrompted flag to true
// This will run in a separate thread
Timer timer = new Timer(false);
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("Press enter");
synchronized(TimerTest.class) {
userPrompted = true;
}
}
}, 5000);

// Blocks waiting for user input
System.out.println("Get ready.. press enter as soon as you're prompted..");
String input = new BufferedReader(new InputStreamReader(System.in)).readLine();

// Check if user has been prompted
synchronized (TimerTest.class) {
if(!userPrompted) System.out.println("You pressed enter before prompted");
else System.out.println("You pressed enter after prompted");
}

}

关于java - 如何清除标准输入(术语),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15649582/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com