填充随机数的数组从范围[-N,N]使用的Math.random

问题描述 投票:0回答:3

我在我进入多维数组n的大小的功能。接着,我填补这个数组随机数的范围是[-N,N],使用的Math.random():

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

java arrays random
3个回答
2
投票

我会改变这一行:

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

至:

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

在特定范围内,以产生一个随机int值,这里[-size,大小]


2
投票

我建议使用ThreadLocalRandom它提供了一个方便的方法:nextInt(int origin, int bound)。然后可以在循环像这样使用:

int[][] array = new int[size][size];
ThreadLocalRandom r = ThreadLocalRandom.current();
for (int i = 0; i < array.length; i++) {
    for (int j = 0; j < array[i].length; j++) {
        array[i][j] = r.nextInt(-size, size + 1);
    }
}

第一个参数origin限定从其中数字应该开始,第二个参数bound exclusivly限制了产生的数字到给定值。


0
投票

因为轮1.5是2,所以换句话说假定随机()= 1和大小= 1那么你有1×(1 + 1)) - 1/2左右(2-1)/ 2

round(1.5)=2

改用.floor(x)的方法,或者不使用圆的,因为你已经铸造为int,这也应该工作(如@Lino指出)。

总结四舍五入为1.5的结果是2,使用地板这样你才会有1。

© www.soinside.com 2019 - 2024. All rights reserved.