Java 编程一个循环,直到你们把东西输入控制台
我试图构建一个循环,当我在控制台中输入文本时,它会执行一个特定的方法。 我想使用java.util.Scanner,但当我尝试使用.hasNext()检查if()内部,然后使用.next()获取输入时,它会等待,直到我输入某个内容,而不是循环Java 编程一个循环,直到你们把东西输入控制台,java,while-loop,console,java.util.scanner,Java,While Loop,Console,Java.util.scanner,我试图构建一个循环,当我在控制台中输入文本时,它会执行一个特定的方法。 我想使用java.util.Scanner,但当我尝试使用.hasNext()检查if()内部,然后使用.next()获取输入时,它会等待,直到我输入某个内容,而不是循环 while(true) { main_loop(); } private void main_loop() { do_other_things(); if(sc.hasNext()){ System.out.pr
while(true) {
main_loop();
}
private void main_loop() {
do_other_things();
if(sc.hasNext()){
System.out.println("user entered " + sc.next());
} else {
System.out.println("user entered nothing");
}
}
如何使其输出“用户输入的内容”,直到我输入内容,以便它输出“用户输入的[…]”,然后继续执行“用户输入的内容”?使用另一个线程:
public static void main(String[] args) {
new Thread(() -> {
Scanner scanner = new Scanner(System.in);
while (true) {
if (scanner.hasNext()) {
//... user has input
}
else {
//... user does not have input
}
}).start();
doSomethingElse();
}
您需要运行一个单独的线程来等待输入,然后(如果您希望在用户输入第二个字符串时触发该线程),在处理完输入后,再次安排可运行线程
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
Scanner scanner = new Scanner(System.in);
Runnable runnable = new Runnable() {
@Override
public void run() {
if (scanner.hasNext()) {
String st = scanner.next();
//do something now the user has inputted
System.out.printf("The user entered a string! (%s)", st);
//run the runnable to wait again
executorService.schedule(this, 0, TimeUnit.SECONDS);
}
}
};
executorService.schedule(runnable, 0, TimeUnit.SECONDS);
}
扫描仪就是这样工作的。它等待正确的输入,阻塞线程。我建议您使用一个
新线程()
。您需要使用第二个线程来执行此任务,其中一个线程用于保持while循环executorService.schedule(this,0,TimeUNit.SECONDS)
,与线程内部的while(true)
相比,这有什么好处?(真正的问题,我对Java的Executor服务很陌生)您可以使用任何一种,这是一种个人偏好。但是,如果您想添加更多功能,例如“冷却”,那么这将提供更大的灵活性,您可以更改重新运行线程的延迟。另一方面,while(true)
更干净。有些人认为<代码>(真)不好的实践,尽管它有优点和缺点,但它是基于意见的。我只是在这里写的(真的)…里面有一个布尔值,用来触发它从里面离开。