Java:计算随机变量的输出?

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

在这个程序中,在滚动一个骰子“x”的次数(userInput)之后,我想计算每个数字出现的次数

我试着制作一个else-if,它会在每个随机数出现时添加一个,但它似乎只对最后一个随机数起作用,可能是因为if不在while循环中?我不知道如何在while循环中添加ifs和else ifs。。。也许我把事情复杂化了

        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]++