Java:计算随机变量的输出?
在这个程序中,在滚动一个骰子“x”的次数(userInput)之后,我想计算每个数字出现的次数 我试着制作一个else-if,它会在每个随机数出现时添加一个,但它似乎只对最后一个随机数起作用,可能是因为if不在while循环中?我不知道如何在while循环中添加ifs和else ifs。。。也许我把事情复杂化了Java:计算随机变量的输出?,java,Java,在这个程序中,在滚动一个骰子“x”的次数(userInput)之后,我想计算每个数字出现的次数 我试着制作一个else-if,它会在每个随机数出现时添加一个,但它似乎只对最后一个随机数起作用,可能是因为if不在while循环中?我不知道如何在while循环中添加ifs和else ifs。。。也许我把事情复杂化了 System.out.println("Enter the number of times a 6 sided die " + "should\n
System.out.println("Enter the number of times a 6 sided die " +
"should\nbe rolled");
Random r = new Random();
int numberOfRolls = userInput.nextInt();
int randomRoll;
int timesRolled = 0;
if (numberOfRolls <= 0) {
System.out.println("Nope, that's below zero");
System.exit(0);
}
do {
timesRolled++;
randomRoll = r.nextInt(6) + 1;
System.out.println(randomRoll + " was rolled");
}
while (numberOfRolls > timesRolled);
int numberOne = 0;
int numberTwo = 0;
int numberThree = 0;
int numberFour = 0;
int numberFive = 0;
int numberSix = 0;
if (randomRoll == 1)
{
numberOne ++;
}
else if (randomRoll == 2)
{
numberTwo ++;
}
else if (randomRoll == 3)
{
numberThree ++;
}
else if (randomRoll == 4)
{
numberFour ++;
}
else if (randomRoll == 5)
{
numberFive ++;
}
else if (randomRoll == 6)
{
numberSix ++;
}
System.out.println(" One: " +numberOne+ "\n Two: " +numberTwo+ "\n Three: " +numberThree+
"\n Four: " +numberFour+ "\n Five: " +numberFive+ "\n Six: " +numberSix);
}
你需要在你的do/while循环中使用大的if/else块来进行滚动。您仅获取1的原因是当do/while退出时,它只能检查
randomRoll
的最新值。所有其他值已被最后一个值覆盖,该数据将丢失
将其重新排序为如下所示:
int numberOne = 0;
int numberTwo = 0;
int numberThree = 0;
int numberFour = 0;
int numberFive = 0;
int numberSix = 0;
do {
timesRolled++;
randomRoll = r.nextInt(6) + 1;
System.out.println(randomRoll + " was rolled");
if (randomRoll == 1)
{
numberOne ++;
}
else if (randomRoll == 2)
{
numberTwo ++;
}
else if (randomRoll == 3)
{
numberThree ++;
}
else if (randomRoll == 4)
{
numberFour ++;
}
else if (randomRoll == 5)
{
numberFive ++;
}
else if (randomRoll == 6)
{
numberSix ++;
}
}
while (numberOfRolls > timesRolled);
编辑:我真的很喜欢Aelexe的建议,将其用作开关,因此下面是它的外观:
//note that I'm shortening things a bit to save a little typing.
//I don't have a Java compiler on the computer I'm at but I think I can get this right from memory.
int one, two, three, four, five, six;
one = two = three = four = five = six = 0;
do
{
timesRolled++;
randomRoll = r.nextInt(6) + 1;
switch(randomRoll)
{
case 1:
++one; break;
case 2:
++two; break;
case 3:
++three; break;
case 4:
++four; break;
case 5:
++five; break;
case 6:
++six;
}
} while(numberOfRolls > timesRolled);
int randomRoll = 6;
int timesRolled = 0;
int numberOfRolls = 8;
int numberOne = 0;
int numberTwo = 0;
int numberThree = 0;
int numberFour = 0;
int numberFive = 0;
int numberSix = 0;
Random r = new Random();
while (numberOfRolls > timesRolled ){
timesRolled++;
randomRoll = r.nextInt(6) + 1;
System.out.println(randomRoll + " was rolled");
if (randomRoll == 1)
{
numberOne ++;
}
else if (randomRoll == 2)
{
numberTwo ++;
}
else if (randomRoll == 3)
{
numberThree ++;
}
else if (randomRoll == 4)
{
numberFour ++;
}
else if (randomRoll == 5)
{
numberFive ++;
}
else if (randomRoll == 6)
{
numberSix ++;
}
System.out.println(" One: " +numberOne+ "\n Two: " +numberTwo+ "\n Three: " +numberThree+
"\n Four: " +numberFour+ "\n Five: " +numberFive+ "\n Six: " +numberSix);
}
编辑2:因为我也喜欢cricket_007的建议,下面是它的样子:
// making this length 7 to avoid off-by-1 indexing issues
// even though they are easy to fix this is conceptually easier
// this just lets index 0 go to waste, its not like we need to save 4 bytes that badly
int[] counters = new int[7];
do
{
timesRolled++;
randomRoll = r.nextInt(6) + 1;
counters[randomRoll]++;
} while (numberOfRolls > timesRolled);
//printing
for(int i = 1; i < counters.length; i++)
{
System.out.printf("Rolled number %d %d times", i, counters[i]);
//I think my format string is right? someone fix it if it isn't.
}
//将此长度设为7,以避免逐个1的索引问题
//尽管它们很容易修复,但这在概念上更容易
//这只会浪费索引0,我们不需要如此严重地节省4个字节
int[]计数器=新的int[7];
做
{
时间滚动++;
randomRoll=r.nextInt(6)+1;
计数器[随机滚动]+;
}while(卷数>卷次);
//印刷品
对于(int i=1;i
您的代码应该是这样的:
//note that I'm shortening things a bit to save a little typing.
//I don't have a Java compiler on the computer I'm at but I think I can get this right from memory.
int one, two, three, four, five, six;
one = two = three = four = five = six = 0;
do
{
timesRolled++;
randomRoll = r.nextInt(6) + 1;
switch(randomRoll)
{
case 1:
++one; break;
case 2:
++two; break;
case 3:
++three; break;
case 4:
++four; break;
case 5:
++five; break;
case 6:
++six;
}
} while(numberOfRolls > timesRolled);
int randomRoll = 6;
int timesRolled = 0;
int numberOfRolls = 8;
int numberOne = 0;
int numberTwo = 0;
int numberThree = 0;
int numberFour = 0;
int numberFive = 0;
int numberSix = 0;
Random r = new Random();
while (numberOfRolls > timesRolled ){
timesRolled++;
randomRoll = r.nextInt(6) + 1;
System.out.println(randomRoll + " was rolled");
if (randomRoll == 1)
{
numberOne ++;
}
else if (randomRoll == 2)
{
numberTwo ++;
}
else if (randomRoll == 3)
{
numberThree ++;
}
else if (randomRoll == 4)
{
numberFour ++;
}
else if (randomRoll == 5)
{
numberFive ++;
}
else if (randomRoll == 6)
{
numberSix ++;
}
System.out.println(" One: " +numberOne+ "\n Two: " +numberTwo+ "\n Three: " +numberThree+
"\n Four: " +numberFour+ "\n Five: " +numberFive+ "\n Six: " +numberSix);
}
你有没有试过把你的逻辑放在循环中,在循环中你实际执行了转鼓?掷骰子后,有多少个数字将“向上”?将if条件移动到while循环中是正确的。还要确保将变量声明移到while循环上方。另外,考虑使用一个Switter语句:顺便说一下,java中的<代码> int s的默认值是0,所以不需要初始化它。@ CasestestaHeli,自从我完成java以来,已经有一段时间了,但是如果你尝试<代码> > ++<代码>(或任何其他数学运算),一个未初始化的变量,编译器不会阻止你吗?也许我把它和另一种语言混在一起了。也许我只是在“过于谨慎”的心态,因为我已经写了几个星期的C。个人来说,我会使用数组。。。一行适用于所有情况<代码>滚动[随机滚动-1]++