我有一个函数,可以输入多维数组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;
}
但是它显示了一些不正确的值。例如,当我输入等于1的n时-显示数字0、1和2。这很奇怪。由于应该输出-1,0,1
答案 0 :(得分:2)
我将更改此行:
array[i][j] = (int) (Math.round(Math.random() * (size + 1)) - size / 2);
收件人:
array[i][j] = ThreadLocalRandom.current().nextInt( -size, size + 1);
生成特定范围内的随机int值,此处为[-size,size]
答案 1 :(得分: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
专门将生成的数字限制为给定值。
答案 2 :(得分:0)
因为1.5的回合是2,所以换句话说,假设random()= 1和size = 1,则您有1 *(1 + 1))-1/2因此(2-1)/ 2
round(1.5)=2
而不是使用.floor(x)方法或不使用round,因为您已经将其强制转换为int,这也应该起作用(如@Lino所指出的那样)。
汇总1.5的舍入结果为2, 使用地板,这样您将拥有1。