java - 随机数的对称二维数组
问题描述
public static int[][] Matrix(int n, int max, int min) {
int[][] grid = new int[3][3];
Random rand = new Random();
rand.setSeed(System.currentTimeMillis());
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
int value = Math.abs((min + rand.nextInt((max - min) + 1)));
grid[i][j] = value;
grid[j][i] = value;
}
}
return grid;
}
以下代码打印一个 2D 对称数组,其中值是范围(最小值和最大值)之间的随机数,打印以下结果作为示例:
0 14 11
14 0 17
11 17 0
我的代码问题是它只打印0
为对角线值。如何更改它以打印它们设置为 int min 而不是的对角线值0
?例如,在上面的代码中 int min is8
因此它会给出这个结果:
8 14 11
14 8 17
11 17 8
解决方案
如果要将对角线设置为下变量,则需要做两件事。
一,因为你设置了 j < i,所以 j 永远不会等于 i,这意味着对角线将被设置为 0,因为 Java 将整数初始化为 0,如果它们没有给出明确的初始化值。我可以通过简单地将 < 更改为 <= 来访问对角线:
for(int i = 0; i < n; i++)
{
for(int j = 0; j <= i; j++)
{
...
}
}
第二,一旦 i 等于 j,您需要添加一个 if 语句来检查它们是否相等。如果它们是,只需将当前网格单元设置为较低的变量。不要忘记将代码块的另一半用 else 块括起来,否则你会得到意想不到的行为:
for(int j = 0; j <= i; j++)
{
if(i == j)
{
grid[i][j] = lower;
}
else
{
...
}
}
最后,您的整个 for 循环块应如下所示:
for(int i = 0; i < n; i++)
{
for( int j = 0; j <= i; j++)
{
if(i == j)
{
grid[i][j] = lower;
}
else
{
int value = Math.abs((lower + rand.nextInt((upper - lower) + 1)));
grid[i][j] = value;
grid[j][i] = value;
}
}
}
推荐阅读
- flutter - 列出 vs 代码中的参数
- react-native - 如何为 react-native-carousel 制作自定义点
- python - 控制流python
- python-3.x - 使用 Python 提取以任何字符开头但不以 Rs 或 SBC 等字符/单词开头的行的正则表达式
- terraform - 在不同账户中担任角色时创建 EKS 失败
- java - 实现控制器通知全局异常处理程序,拦截运行时异常
- azure - Azure NSG 专用 IP 配置(白名单)Vnet 到 Vnet 通信
- javascript - 为什么 document.getElementById.value = "XYZ" 不写入输入文本字段?
- lua - 如何让roblox中的NPC正常四处走动,然后当它看到玩家追赶他们时
- embedded-linux - `APPEND` 变量不更新内核命令行