【发布时间】:2016-11-12 22:31:36
【问题描述】:
这是我应该模拟掷骰子游戏的代码:我得到正确的输赢结果,但我无法获得正确的概率。有什么建议吗?
请帮助说明: 在掷骰子游戏中,及格线投注进行如下。掷出两个六面骰子;在掷骰子游戏中,第一次掷骰子称为“出局掷骰”。掷出 7 或 11 自动获胜,掷出 2、3 或 12 自动输。如果出局点数为 4、5、6、8、9 或 10,则该数字成为点数。玩家继续掷骰子,直到掷出 7 点或点数。如果点数先滚动,则玩家赢得赌注。如果先掷出 7,则玩家输。编写一个程序,在没有人工输入的情况下使用这些规则模拟掷骰子游戏。程序应该计算玩家是赢还是输,而不是要求下注。
程序应该模拟掷两个骰子并计算总和。添加一个循环,让程序玩 10,000 场游戏。添加计数器来计算玩家赢了多少次,以及玩家输了多少次。在 10,000 场比赛结束时,计算获胜的概率 [即 Wins / (Wins + Losses)] 并输出该值。从长远来看,谁会赢得最多的比赛,你还是房子?注意:要生成随机数 x,其中 0 x ≤
public class Dice
{
public static void main(String[]args)
{
//declaring variables
int comeOutRoll1, comeOutRoll2;
int roll1, roll2;
int numW, numL;
int sum, sum2 = 0;
int thePoint = 0;
double probability;
//initializing variables
comeOutRoll1 = (int)(Math.random()*5);
comeOutRoll2 = (int)(Math.random()*5);
sum = comeOutRoll1 + comeOutRoll2;
numW = 0;
numL = 0;
for(int timesPlayed = 0; timesPlayed <= 10000; timesPlayed++)
{
switch(sum)
{
//adds how many wins and losses
case 2:
numL = numL +1;
break;
case 3:
numL = numL + 1;
break;
case 12:
numL = numL + 1;
break;
case 7:
numW = numW +1;
break;
case 11:
numW = numW +1;
break;
case 4:
thePoint = sum;
break;
case 5:
thePoint = sum;
break;
case 6:
thePoint = sum;
break;
case 8:
thePoint = sum;
break;
case 9:
thePoint = sum;
break;
case 10:
thePoint = sum;
break;
//if not any of these cases roll again
default:
roll1 = (int)(Math.random()*5);
roll2 = (int)(Math.random()*5);
sum2 = roll1 + roll2;
break;
}
if(sum2 == thePoint)
{
numW = numW +1;
}
else if(sum2 == 7)
{
numL = numL +1;
}
}
probability = (numW/(numW+numL));
System.out.println("Number of Wins: " + numW);
System.out.println("Number of Losses: " + numL);
System.out.println("The probability of winning is: " + probability + " percent");
}
}
【问题讨论】:
-
旁注:您可以通过编写多个不带
break的case语句来避免为不同的情况重新键入相同的代码,例如:case 4: case 5: case 6: case 8: case 9: case 10: thePoint = sum; break;。 -
太好了?你得到什么输出,你期望什么输出?即,实际问题是什么?
-
这个模拟非常刺激... ;)
-
@BackSlash 我的输出是:获胜次数:369 失败次数:813 获胜概率是:0.0%
标签: java