【问题标题】:Random matrix fill between 1 and 0 in javajava中1到0之间的随机矩阵填充
【发布时间】:2017-04-10 02:47:29
【问题描述】:

我正在尝试用 0 和 1 随机填充一个二维 int 数组,这是我用来填充数组的方法

   private void buildMaze(){
           maze=new int[this.mazeSize][this.mazeSize];
       for(int i=0;i<this.mazeSize;i++){
            for(int j=0;j<this.mazeSize;j++){
                this.maze[i][j]=r.nextInt(2)-1;    
            }
        }
}

我面临的问题是,每次我运行测试时,我都会得到这样的结果:

| -1 ||  0 ||  0  |
|  0 || -1 || -1  |
|  0 || -1 || -1  |

我的问题是:如何正确地用 0 到 1 之间的随机值填充数组?

【问题讨论】:

  • 您可能希望显示您的声明和初始化 r(随机数生成器)。
  • 你可能想使用 Math.random() 而不是 Random 类 Math.random 生成 0 到 1 之间的随机数,然后将其显式转换为 int

标签: java arrays random


【解决方案1】:

Random.nextInt(int bound) 方法返回介于 0(包括)和指定值(不包括)之间的 int 值。对于您的情况,它的返回值介于 0 到 1 之间,但您从中减去 1。所以当这个方法返回 0 时,你减去 1,所以它给你 -1。

更新您的代码,如下所示:

this.maze[i][j]=r.nextInt(2);  

【讨论】:

    【解决方案2】:

    假设您使用的是Random,您可能会考虑使用nextBoolean()(它不会很快消耗熵)。你也可以使用for-each loop

    private void buildMaze() {
        maze = new int[this.mazeSize][this.mazeSize];
        for (int[] row : maze) {
            for (int j = 0; j < row.length; j++) {
                row[j] = r.nextBoolean() ? 1 : 0;
            }
        }
    }
    

    您当前的方法r.nextInt(2)-1; 生成01,然后减去一个产生范围-1, 0。你也可以写

    private void buildMaze() {
        maze = new int[this.mazeSize][this.mazeSize];
        for (int[] row : maze) {
            for (int j = 0; j < row.length; j++) {
                row[j] = r.nextInt(2); // <-- 0 (inclusive) to 2 (exclusive)
            }
        }
    }
    

    【讨论】:

    • 但最好也解释一下为什么 OP 代码不起作用。
    【解决方案3】:

    你可以试试这样的

    Math.random()
    

    返回一个带正号的双精度值,大于或等于 0.0 且小于 1.0

                double j=Math.random();
                j=(j>0.5)?1:0;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 2018-02-27
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      相关资源
      最近更新 更多