暂停java中的for循环

时间:2011-12-12 04:37:37

标签: java loops

有没有办法在java中暂停for循环?那么有没有办法只在提示时前进一次迭代?我读了这个http://answers.yahoo.com/question/index?qid=20100212201605AAazS73,解决方案似乎可能有一些问题,主要是因为我不完全理解for循环检查其标题的顺序。我能想到的唯一可以实现类似的方法是以下

    do {
        if (FLAG) {
            //Do procedure
            i++;
            FLAG = false;
        }
    } while ( i < 6);

当标志为真时,程序完成,计数器向前移动一个。我不喜欢这样,因为只要计数器低于6,它就会保持循环,如果我没有弄错的话。有什么想法吗?

- 因缺乏清晰度而烦恼。在我的情况下,FLAG将是一个静态布尔值,可以从另一个类调用。我提到的程序取决于我。

6 个答案:

答案 0 :(得分:3)

当迭代for循环时,例如下面的那个循环,它会执行以下操作

for (int i = 0; i < 6; i++) {
    // Do stuff
}
  1. 它声明变量i并指定值0
  2. 检查条件i < 6。如果为true,则继续执行步骤3.否则,请转到步骤6.
  3. 穿过循环体。
  4. 由于for循环标题中的i而增加变量i++
  5. 转到第2步。
  6. 循环结束。
  7. 至于你的目标,我不确定你的目标是什么。您是否希望暂停使用阻止方法调用?如果是这样,那么这样的事情就可以了:

    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。