You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java二维数组奇数列设随机数后输出全0问题求助

二维数组赋值逻辑错误,所有元素始终为0的排查与修复

问题说明

我编写了createTransitionArray方法,目标是生成一个二维数组:

  • 列索引为奇数的位置赋值90-100的随机整数
  • 其余位置赋值为0

但实际运行后,无论打印整个数组还是指定位置,结果全为0,终端无任何报错。

原代码

static public int[][] createTransitionArray(int row, int col)
{
    int[][] arr2d = new int[row][col];
    
    int zero = 0;
    
    for (int i = row; i == 0; i--)
    {
        for (int j = col; j == 0; j--)
        {    
            int randomInt = (90 + (int)(Math.random() * ((100 - 90) + 1)));

            if (j % 2 == 0)
            {
                arr2d[i][j] = zero;
            }
            else if (j % 2 != 0)
            {
                arr2d[i][j] = randomInt;
            }
        }   
    }
    System.out.println(arr2d[2][3]);
    System.out.println(arr2d[4][5]);

    for (int k = 0; k < row; k++)
    {
        for (int l = 0; l <col; l++)
        {
            System.out.print(arr2d[k][l]);
        }
        System.out.println("");
    }
    return arr2d;
}

当前输出

0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000

预期输出(非零数为90-100随机整数,分隔线可忽略)

|0|99|0|94|0|100|0|93|0|99
|0|100|0|93|0|96|0|99|0|96
|0|93|0|94|0|91|0|93|0|97
---------------------------
|0|99|0|93|0|94|0|97|0|100
---------------------------
|0|96|0|100|0|91|0|97|0|94
---------------------------
|0|100|0|94|0|99|0|93|0|99
---------------------------
|0|93|0|100|0|97|0|95|0|95
---------------------------
|0|92|0|93|0|91|0|100|0|100
---------------------------
|0|95|0|95|0|96|0|98|0|95
---------------------------
|0|99|0|100|0|97|0|98|0|93
---------------------------

问题排查

核心问题是赋值循环完全没有执行:

  1. 外层循环for (int i = row; i == 0; i--):初始值i = row(row为正整数),循环条件是i == 0,第一次判断就不满足,循环直接跳过
  2. 内层循环同理for (int j = col; j == 0; j--),同样不会执行
  3. 额外问题:数组索引从0开始,原代码中判断j%2==0的逻辑与需求不符,需求是列索引为奇数的位置赋值随机数,应该判断索引是否为奇数

修复后的代码

static public int[][] createTransitionArray(int row, int col)
{
    int[][] arr2d = new int[row][col];
    
    // 遍历每一行
    for (int i = 0; i < row; i++)
    {
        // 遍历每一列
        for (int j = 0; j < col; j++)
        {    
            // 列索引为奇数时生成90-100的随机整数
            if (j % 2 != 0)
            {
                int randomInt = 90 + (int)(Math.random() * 11);
                arr2d[i][j] = randomInt;
            }
        }   
    }
    
    // 测试指定位置输出
    System.out.println(arr2d[2][3]);
    System.out.println(arr2d[4][5]);

    // 打印数组,贴近预期格式
    for (int k = 0; k < row; k++)
    {
        System.out.print("|");
        for (int l = 0; l < col; l++)
        {
            System.out.print(arr2d[k][l] + "|");
        }
        System.out.println("");
        // 每3行打印分隔线(可选)
        if ((k + 1) % 3 == 0 && k != row - 1) {
            System.out.println("---------------------------");
        }
    }
    return arr2d;
}

关键修复点

  1. 修正循环逻辑:使用for (int i = 0; i < row; i++)和for (int j = 0; j < col; j++),确保遍历数组每个元素
  2. 调整判断条件:用j % 2 != 0判断列索引为奇数的位置,符合需求
  3. 简化随机数生成:90 + (int)(Math.random() * 11)等价于原逻辑,更简洁(100-90+1=11)
  4. 优化初始化:int数组默认元素为0,无需额外赋值0,减少冗余代码
  5. 可选调整打印格式,贴近预期输出样式

内容的提问来源于stack exchange,提问作者bro_Nico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:37:37