有没有办法在java中暂停for循环?那么有没有办法只在提示时前进一次迭代?我读了这个http://answers.yahoo.com/question/index?qid=20100212201605AAazS73,解决方案似乎可能有一些问题,主要是因为我不完全理解for循环检查其标题的顺序。我能想到的唯一可以实现类似的方法是以下
do {
if (FLAG) {
//Do procedure
i++;
FLAG = false;
}
} while ( i < 6);
当标志为真时,程序完成,计数器向前移动一个。我不喜欢这样,因为只要计数器低于6,它就会保持循环,如果我没有弄错的话。有什么想法吗?
- 因缺乏清晰度而烦恼。在我的情况下,FLAG将是一个静态布尔值,可以从另一个类调用。我提到的程序取决于我。
答案 0 :(得分:3)
当迭代for循环时,例如下面的那个循环,它会执行以下操作
for (int i = 0; i < 6; i++) {
// Do stuff
}
i
并指定值0
。i < 6
。如果为true,则继续执行步骤3.否则,请转到步骤6. i
而增加变量i++
。至于你的目标,我不确定你的目标是什么。您是否希望暂停使用阻止方法调用?如果是这样,那么这样的事情就可以了:
for (int i = 0; i < 6; i++) {
System.in.readLine();
}
或者,您可以使用某种轮询标记来检查循环是否应该继续,例如:
for (int i = 0; i < 6; i++) {
while (paused) {
// An infinite loop that keeps on going until the pause flag is set to false
}
}
希望这会有所帮助。
答案 1 :(得分:2)
目前尚不清楚你的意思是什么样的“提示”。你当然可以这样做:
for (int i = 0; i < 6; i++) {
System.out.println("Press return to continue...");
System.in.readLine();
// Do the body of the loop
}
这适用于控制台应用,但显然不适用于(比如说)Swing应用。它也没有解决示例代码中的FLAG部分,因为它不清楚这是什么意思。您是试图提示用户提供更多信息,还是只是确认继续?如果你能澄清你想要达到的目标,那将会有所帮助。
为了可测试性,如果这是非一次性代码,您可能想要提取用户提示的想法,因此您可以使用不实际提示的实现进行测试用户,但只记录它本来会这样做。
答案 2 :(得分:0)
这将涉及阻止for循环占用的Thread
。
你可以这样做,但不是很好,用这个:
for(something)
while(!FLAG)
//Do procedure
另一种方法是让另一个Thread
继续进行,让主线程等待另一个线程。
以下是更多信息:How to make a Java thread wait for another thread's output?
答案 3 :(得分:0)
你的目标有点不清楚。我想你希望你的程序继续运行,直到得到六个特定输入,如果是这样,那么这种方法会起作用,当然你需要从用户那里得到输入来推动循环。
如果您担心while循环会占用大量系统资源,那就不会有问题了。
答案 4 :(得分:0)
好吧,你可以使用Thread.Sleep();
在标志检查之间暂停一下,但你真正想要的是一个在等待输入时阻塞的函数,System.in.readline();
阻塞如果我没记错的话;)像这样:
int i = 0
do
{
if(FLAG)
{
//Do stuff
i++;
//Clear Flag
}
Thread.Sleep(50); //Sleep for 50 ms
} while (i < 6);
或者像这样:
for(int i = 0; i < 6; i++) //Execute readline 6 times.
{
System.in.readLine();
}
答案 5 :(得分:0)
其他人已经介绍了如何使用System.in.readLine()
让程序明确要求用户采取行动。
如果您需要的是不让程序等待用户,但允许您 - 程序员 - 减慢程序速度,以便能够找到并修复错误,您可能需要考虑使用调试器,因为它正是它的设计目的。
任何现代Java IDE都有一个调试器。选择使用它的键只是变化。
如果您使用的是Eclipse,则使用F11或Ctrl-F11(假设为Windows)来运行程序。区别在于F11在调试器内启动程序而Ctrl-F11没有。
将光标放在for循环内的第一行,然后选择Run-&gt; Toggle Breakpoint。一条蓝色的子弹将显示在该线的左侧。这表示断点处于活动状态 - 调试器现在每次到达该行时都会停止程序。
现在使用F11在调试器中运行程序。程序在该行停止,您可以根据需要在“变量”窗格中调查变量,并在准备就绪时继续执行F8。