这行代码做什么`++ arr [1 + r.nextInt(6)];`

时间:2016-02-25 12:23:31

标签: java

我想知道,因为我正在从教程中学习Java,并且有一个程序用于掷骰子1000次并打印它的频率。

book | user | phone
445    l       55
332    w       57
881    o       49

5 个答案:

答案 0 :(得分:2)

总而言之,该程序模拟滚动六面骰子1000次,并记录每个掷骰数的 出现次数

public static void main(String[] args) {
    Random r=new Random();
    int arr[]= new int[7];                    //Craete an array with 7 int elements
    System.out.println("diceNo.\tFrequency");

    for(int roll=1;roll<1000;roll++){         //Loop 1000 times
        ++arr[1+r.nextInt(6)];                //Randomly pick arr[1] to 
    }                                         //arr[6] and plus one to it        

    for(int i=1;i<arr.length;i++){
        System.out.println(i+"\t"+arr[i]);    //Print occurrence of 1-6
    }    
}

违反以下代码:

++arr[1+r.nextInt(6)];     //r.nextInt(6) will be evaluated first:

r.nextInt(6)会返回(0-5)的随机值,因此您拥有:

++arr[1+(random 0 to 5)];  //+1 will be evaluated next:

因此,您生成的随机值为1-6。接下来,向数组中添加1:

++arr[random 1 to 6];      //+1 to arr[1] or arr[2] or arr[3] or arr[4] or arr[5] or arr[6]

现在可以解释为:

arr[1] +=1;  //or
arr[2] +=1;  //or
arr[3] +=1;  //or
arr[4] +=1;  //or
arr[5] +=1;  //or
arr[6] +=1;

因此,运行程序后,如果您的数组如下:

 [0] [1] [2] [3] [4] [5] [6]   Array index
+---+---+---+---+---+---+---+
| 0 |175|170|165|170|165|175| <-- arr 
+---+---+---+---+---+---+---+

It means 1 was rolled 175 times, 
2 was rolled 170 times, 
3 was rolled 165 times,
and so on..

答案 1 :(得分:1)

r.nextInt(6)生成一个0到5之间的随机整数。在它上面加1可以得到1到6之间的随机骰子。

arr数组用于计算每次掷骰子发生的次数,因此++arr[1+r.nextInt(6)]会增加当前掷骰的计数。

完成第一个循环后,arr[1]保持1的数量,arr[2]的数量为2,依此类推。

答案 2 :(得分:1)

1 + r.nextInt(6)从1到6包含一个随机数。

++arr[1 + r.nextInt(6)];递增数组arr的元素。

因此建立了骰子卷的频率分布。不使用数组的第零个元素。这就是为什么它设置了7个元素。或许浪费?你告诉我。

答案 3 :(得分:0)

  1. r.nextInt(6) - 得到随机数&lt; 6;
  2. arr [1 + r.nextInt(6)] - 从数组arr获取一个项目,索引为1 +步骤1中的随机数;
  3. ++ arr [1 + r.nextInt(6)]将项目从步骤2增加1

答案 4 :(得分:0)

此行等同于:

int number = r.nextInt(6); // Generates a random number between 0 and 6(exclusive)
int index = number + 1; // Since the faces of dice has value from 1 to 6
int value = arr[index];
and increases this number by 1;