首页 > 解决方案 > 使用 Math.random 用 [-n, n] 范围内的随机数填充数组

问题描述

我有一个函数,可以在其中输入多维数组 n 的大小。接下来,我使用 Math.random() 用 [-n, n] 范围内的随机数填充这个数组:

private int[][] enterMatrixSize() {
    System.out.print("enter matrix size (n): ");
    String input;
    while (!(input = in.next()).matches("\\p{Digit}+")) {
        System.out.print("Please enter a positive Integer: ");
    }
    int size = Integer.parseInt(input);
    int[][] array = new int[size][size];
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array[i].length; j++) {
            array[i][j] = (int) (Math.round(Math.random() * (size + 1)) - size / 2);
        }
    }
    for (int i = 0; i < array.length; i++, System.out.println()) {
        for (int j = 0; j < array[i].length; j++) {
            System.out.print(array[i][j]+" ");
        }
    }
    return array;
}

但它显示了一些不正确的值。例如,当我输入 n 等于 1 时 - 显示数字 0、1 和 2。这很奇怪。因为应该输出 -1, 0, 1

标签: javaarraysrandom

解决方案


我会改变这一行:

array[i][j] = (int) (Math.round(Math.random() * (size + 1)) - size / 2); 

至:

array[i][j] = ThreadLocalRandom.current().nextInt( -size, size + 1);

生成特定范围内的随机 int 值,此处为 [-size, size]


推荐阅读