我在我进入多维数组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
我会改变这一行:
array[i][j] = (int) (Math.round(Math.random() * (size + 1)) - size / 2);
至:
array[i][j] = ThreadLocalRandom.current().nextInt( -size, size + 1);
在特定范围内,以产生一个随机int值,这里[-size,大小]
我建议使用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限制了产生的数字到给定值。
因为轮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。