首页 > 解决方案 > 随机数的对称二维数组

问题描述

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 

标签: javaarraysmatrixmultidimensional-array

解决方案


如果要将对角线设置为下变量,则需要做两件事。

一,因为你设置了 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;
        }  
    }
}

推荐阅读