到目前为止,我一直无法找到与此相关的内容。我听说在这样的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);
}
}
答案 0 :(得分:4)
我不是Java家伙,但在许多语言中1==1
通常都会优化为true
。
因此,您可以使用while(true)
或while(1==1)
甚至while (2==2)
。
没关系。
在你的情况下,它并不重要,因为你的while循环不会强迫CPU工作。您的循环大多数时间都在等待用户输入。 在这种情况下不要担心这一点。
虽然在某些情况下循环效率极低。在这些情况下 - 使用事件而不是循环会更好。
非常不正确的低效循环的理论示例:
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”