gpt4 book ai didi

java - 随机数的对称二维数组

转载 作者:行者123 更新时间:2023-12-04 15:08:01 24 4
gpt4 key购买 nike

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;
}

下面的代码打印一个二维对称数组,其中的值是一个范围(最小值和最大值)之间的随机数,打印结果如下:

0 14 11 
14 0 17
11 17 0

我的代码问题是它只打印 0 作为对角线值。如何更改它以打印对角线值,其中它们被设置为 int min 而不是 0?例如,在上面的代码中,int min 是 8 因此它会给出这个结果:

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 block 将代码块的另一半包含起来,否则你会得到意想不到的行为:

for(int j = 0; j <= i; j++) 
{
if(i == j)
{
grid[i][j] = lower;
}
else
{
...
}
}

最后,您的整个 for 循环 block 应该如下所示:

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;
}
}
}

关于java - 随机数的对称二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65726989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com