【问题标题】:Random number for dice (help)骰子的随机数(帮助)
【发布时间】:2017-06-06 09:53:46
【问题描述】:
import java.util.*;
import java.lang.*;

public class Main {

public static void main(String[] args) {


    Random dice = new Random();
    int a[]=new int [7];


    for(int i = 1 ; i <=100;i++){
        ++a[1+dice.nextInt(6)];
    }
    System.out.println("Sno\t Values");

    int no;
    for(int i=1;i<a.length;i++){

        System.out.println(i+"\t"+a[i]);
    }


}
}


Sno  Values
1   19
2   13
3   16
4   16
5   19
6   18

谁能解释一下“++a[1+dice.nextInt(6)]”这一行

我知道这个程序提供了从 1-6 生成的随机数,在给定值内多少次

【问题讨论】:

  • 该行只计算每个数字的频率。
  • dice.nextInt 将从 0 开始其范围,因此添加 1 将使 dice.nextInt(6) 为您提供从 1 到 6 而不是 0 到 5 的结果

标签: java arrays random


【解决方案1】:

大多数情况下,这很难阅读代码。至少稍微更容易阅读(IMO)

a[dice.nextInt(6) + 1]++;

...但是如果你把事情分开,它仍然更容易理解:

int roll = dice.nextInt(6) + 1;
a[roll]++;

请注意,++foofoo++ 之间没有区别,因为这是整个语句 - 使用后增量形式 (foo++) 通常更易于阅读,IMO:弄清楚你要做什么递增,然后递增。

Random.nextInt(6) 将返回一个介于 0 和 5(含)之间的值 - 因此,将 1 添加到该结果中会得到一个介于 1 和 6(含)之间的值。

【讨论】:

  • 我有点理解我仍然想知道“a”可以存储 7 个元素,但是当我执行它时它提供了 a[0]=22(随机)值,其他元素也是如此。问题是为什么它为(0)提供 22 为(1)提供 32 就像我的意思是我通过 100 给循环它计算 1 滚动 100 次的次数?
  • @jayanth:是的,由于int a[]=new int [7],它可以存储元素0到6(含)。代码中未使用元素 0。
  • 我知道那部分你能解释一下第一个元素是如何得到 22(随机)的。我是编码新手
  • @jayanth:第一个元素是索引 0,它永远不会有非零值。不太清楚你在问什么,但听起来你应该在调试器中单步执行代码。
  • @jayanth:我不知道那条评论是什么意思,但听起来你应该使用调试器来帮助你更多地理解代码,以及这里的答案。 Stack Overflow 并非旨在用作一种结对编程工具 - 我们不会为您逐步完成代码。
【解决方案2】:

是的,首先你有

int a[]=new int [7];

这是一个可以容纳 7 个元素(有效索引为 0-6)的数组,所有元素的初始值都是 0。那么

++a[1+dice.nextInt(6)];

在说

int randomIndex = 1 + dice.nextInt(6); // <-- a random value 1 to 6 inclusive
a[randomIndex] = a[randomIndex] + 1;

这是计算掷出多少个到六的数字。

【讨论】:

    【解决方案3】:

    ++a[1+dice.nextInt(6)]

    dice.nextInt(6)= 返回一个介于 0 和 5 之间的整数

    然后将该值加 1,然后在数组 a 中获取该索引处的元素,然后使用 增加该元素++ 操作

    【讨论】:

    • dice.nextInt(6); 返回一个介于 0 到 5 之间的值。
    • @SanketMakani 你是对的,感谢您的评论/反馈!
    【解决方案4】:

    nextInt() 返回一个伪随机、均匀分布的值,介于 0(包括)和指定值(不包括)之间,取自该随机数生成器的序列。

    所以1+dice.nextInt(6) 的值将介于 1 到 6 之间(包括两个值)并增加 a[x] 的值,就像 x 的计数器一样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2014-05-30
      • 2018-03-29
      • 2011-07-18
      • 2016-01-10
      • 2013-12-18
      • 1970-01-01
      相关资源
      最近更新 更多