【发布时间】:2014-03-29 00:48:38
【问题描述】:
所以我在模拟掷骰子游戏时遇到了问题。除了 while 循环中的 while 循环外,一切都正常运行。调试时,sum 变量保持它的值,newSum 变量在每次迭代中都在变化,并且经常达到 7 和sum 变量的值。如果我注释掉嵌套的 while 循环,并将其设置为 wins++;,那么代码将正确执行,达到预期值。所以我很确定问题出在嵌套循环内。
感谢您的所有意见!
import java.util.Random;
import java.text.DecimalFormat;
public class Ch3Ex2
{
public static void main (String[] args)
{
Random rng = new Random();
int counter = 0;
int sum = 0;
int wins = 0;
int losses = 0;
int newSum = 0;
int reroll1 = 0;
int reroll2 = 0;
while (counter < 10000)
{
int die1 = rng.nextInt(6) + 1;
int die2 = rng.nextInt(6) + 1;
sum = die1 + die2;
if ((sum == 7) || (sum == 11))
wins++;
else if ((sum == 2) || (sum == 3) || (sum == 12))
losses++;
else
{
while((newSum != sum) || (newSum != 7))
{
reroll1 = rng.nextInt(6) + 1;
reroll2 = rng.nextInt(6) + 1;
newSum = reroll1 + reroll2;
}
if (newSum == sum)
{
wins++;
}
else
{
losses++;
}
}
counter++;
}
DecimalFormat percent = new DecimalFormat("0.00%");
double winDenom = wins + losses;
double winRate = wins/winDenom;
System.out.print("Your chance of winning a game of craps is : ");
System.out.println(percent.format(winRate));
}
}
【问题讨论】:
-
除非
sum等于7,否则这些条件中的至少一个总是true。 -
蹩脚的代码格式和不连贯的括号样式的问题在于,人们会遇到许多其他情况下根本不会想到的错误。
-
你能详细说明 Smutje 有什么问题吗?这就是我被教导的方式,除了两次缩进“losses++:”一次..
-
大多数人转向总是将 { } 放在 if/etc 中的语句周围是有原因的,即使对于单个语句也是如此。
标签: java while-loop nested-loops