我如何 运行 一个循环,其中 java 每次循环时暂停,如果有用户输入,值将添加到列表的末尾?
How do I run a loop wherein java is paused each time the loop goes around and values are added to the end of a list if there is user input?
我不知道如何更简洁地命名这个问题。基本上,我想知道如何在每个循环调用 TimeUnit.SECONDS.sleep
方法时 运行 一个 for 循环,并在有用户输入时将值添加到该循环正在经历的列表的末尾。
相关代码如下:
Scanner input = new Scanner(System.in);
for (int i = 0; i < printQueue.size(); i++)
{
System.out.println("Printing " + i + " of " + printQueue.size()
+ "\n" + printQueue.get(i).getJobTime()
+ " seconds remaining."
+ "\nPlease press \"Enter\" to submit a new print"
+ " job.");
TimeUnit.SECONDS.sleep(printQueue.get(i).getJobTime());
if (input.hasNextLine())
{
input.nextLine();
int printTime = jobGen.nextInt(10);
PrintJob job = new PrintJob();
job.setJobNum(i);
job.setJobTime(printTime);
printQueue.add(job);
}
}
System.out.println(
"Printed " + printQueue.size() + " of " + printQueue.size());
}
其中 printQueue
是不同 PrintJobs
的链表,每个链表都有一个 jobNum
,更重要的是一个 jobTime
。如果用户在任何单个循环中按下回车键,则会自动生成一个新的 PrintJob
并添加到 printQueue
.
的末尾
现在发生的事情是,程序只是 运行s 并且永远不会终止,除非我按下 enter 键。我知道 hasNextLine
和 hasNext
可能会阻止扫描指定的项目,但我不知道如何实现这样的东西。
谢谢。
Scanner.hasNextLine() 块等待输入,直到一行可用或到达输入末尾。因此,您不能同步使用它来检查输入是否可用。正如@Abion47 所建议的那样,您应该将此输入处理移动到一个单独的线程中。
我不知道如何更简洁地命名这个问题。基本上,我想知道如何在每个循环调用 TimeUnit.SECONDS.sleep
方法时 运行 一个 for 循环,并在有用户输入时将值添加到该循环正在经历的列表的末尾。
相关代码如下:
Scanner input = new Scanner(System.in);
for (int i = 0; i < printQueue.size(); i++)
{
System.out.println("Printing " + i + " of " + printQueue.size()
+ "\n" + printQueue.get(i).getJobTime()
+ " seconds remaining."
+ "\nPlease press \"Enter\" to submit a new print"
+ " job.");
TimeUnit.SECONDS.sleep(printQueue.get(i).getJobTime());
if (input.hasNextLine())
{
input.nextLine();
int printTime = jobGen.nextInt(10);
PrintJob job = new PrintJob();
job.setJobNum(i);
job.setJobTime(printTime);
printQueue.add(job);
}
}
System.out.println(
"Printed " + printQueue.size() + " of " + printQueue.size());
}
其中 printQueue
是不同 PrintJobs
的链表,每个链表都有一个 jobNum
,更重要的是一个 jobTime
。如果用户在任何单个循环中按下回车键,则会自动生成一个新的 PrintJob
并添加到 printQueue
.
现在发生的事情是,程序只是 运行s 并且永远不会终止,除非我按下 enter 键。我知道 hasNextLine
和 hasNext
可能会阻止扫描指定的项目,但我不知道如何实现这样的东西。
谢谢。
Scanner.hasNextLine() 块等待输入,直到一行可用或到达输入末尾。因此,您不能同步使用它来检查输入是否可用。正如@Abion47 所建议的那样,您应该将此输入处理移动到一个单独的线程中。