用Java替换while(1 == 1)循环

时间:2014-10-01 21:43:29

标签: java while-loop

到目前为止,我一直无法找到与此相关的内容。我听说在这样的while循环中围绕你的大部分程序会使程序效率低下,有没有更好的方法来获得相同的效果?

    while (1 == 1) {
        //User Input 
        System.out.println("Do you wish to roll? (Y/N)"); 
        if (kb.hasNext()) {
            userContinue = kb.next(); 
        }
        if (userContinue.equalsIgnoreCase("n")) {
            System.exit(0);
        }
        //Calculations 
        score = 0; 
        while (userContinue.equalsIgnoreCase("Y")) {
            rollResult = user.rollTwoDie(); 
            score = rollResult + score; 
            if (score > 21) {
                System.out.println("You loose for going over 21."); 
                System.out.println("Your final score was: " + score); 
                score = 0; 
                System.out.println("Play again? (Y/N)"); 
                if (kb.hasNext()) {
                    userContinue = kb.next(); 
                }
                if (userContinue.equalsIgnoreCase("n")) {
                    System.exit(0); 
                }
            }
            else if (score <= 21) {
                System.out.println("Your score is: " + score); 
                System.out.println("Roll again? (Y/N)"); 
                if (kb.hasNext()) {
                    userContinue = kb.next(); 
                }
            }
        }
        if (userContinue.equalsIgnoreCase("N")) {
            while (computerScore <= score && computerScore < max) {
                computerResult = computer.rollTwoDie(); 
                computerScore = computerResult + computerScore; 
            }
            userContinue = computer.checkComputerScore(computerScore, score); 
        }
    }

2 个答案:

答案 0 :(得分:4)

  1. 我不是Java家伙,但在许多语言中1==1通常都会优化为true

    因此,您可以使用while(true)while(1==1)甚至while (2==2)

    没关系。

  2. 在你的情况下,它并不重要,因为你的while循环不会强迫CPU工作。您的循环大多数时间都在等待用户输入。 在这种情况下不要担心这一点。

  3. 虽然在某些情况下循环效率极低。在这些情况下 - 使用事件而不是循环会更好。

  4. 非常不正确的低效循环的理论示例:

     while(true)
     {
          if(textBox1.Text == "yes") x = 1;
          if(textBox1.Text == "no") x = 2;
    
          if (x == 1) doSomething();
          if (x == 2) doSomethingElse();
     }
    

    这是非常低效的,因为你&#34;问&#34;关于文本框中的数据的一次又一次的接口,没有理由这样做。没有暂停,CPU和内存被迫一次又一次地做同样的事情而没有停顿。在这种情况下 - 应该使用事件。

    许多编程语言中都存在事件。有许多网站,视频和教程解释事件。

    观看有关Java活动的视频:

    Java Programming Tutorial - 52 - Event Handling on Youtube (by Bucky Roberts)

    看了这个(也许还有几个Bucky或其他教程视频)之后你应该更好地理解为什么有时候循环是个坏主意。

答案 1 :(得分:1)

这不一定是效率低下的。它会无休止地运行。如果你想要那么这不一定是邪恶的。

您可以考虑的一件事是添加一个停止布尔值。这样,您可以询问用户是否要退出,并将变量设置为true / false。

boolean stop = false;
while(stop == false) {
    //...
}

另外,从风格上来说,我喜欢做这样的无限循环:

while(true) {
    //...
}

而不是使用“1 == 1”