java - 使用 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
解决方案
我会改变这一行:
array[i][j] = (int) (Math.round(Math.random() * (size + 1)) - size / 2);
至:
array[i][j] = ThreadLocalRandom.current().nextInt( -size, size + 1);
生成特定范围内的随机 int 值,此处为 [-size, size]
推荐阅读
- javascript - D3.js 强制有向图节点的不同形状
- asp.net-mvc - MVC 如何创建具有默认值的新对象
- javascript - 在 Firebase 中订购实时更新
- wpf - 标签内容的 WPF 转换器
- docker - 将所有服务端口转发到单个容器
- android - 如何在不解码的情况下在画布上绘制压缩图像?
- driver - SV:程序驱动程序的错误合法组合
- php - 问题:从同一本地网络中的 Mac 登录本地服务器上的 mariadb 数据库
- python - 需要在前端的数据库中使用 Python 和 Selenium 停用用户,但参考过时
- java - 无法通过双击打开可执行 Jar 文件