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 ---------------------------
问题排查
核心问题是赋值循环完全没有执行:
- 外层循环
for (int i = row; i == 0; i--):初始值i = row(row为正整数),循环条件是i == 0,第一次判断就不满足,循环直接跳过 - 内层循环同理
for (int j = col; j == 0; j--),同样不会执行 - 额外问题:数组索引从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; }
关键修复点
- 修正循环逻辑:使用
for (int i = 0; i < row; i++)和for (int j = 0; j < col; j++),确保遍历数组每个元素 - 调整判断条件:用
j % 2 != 0判断列索引为奇数的位置,符合需求 - 简化随机数生成:
90 + (int)(Math.random() * 11)等价于原逻辑,更简洁(100-90+1=11) - 优化初始化:int数组默认元素为0,无需额外赋值0,减少冗余代码
- 可选调整打印格式,贴近预期输出样式
内容的提问来源于stack exchange,提问作者bro_Nico
相关产品推荐
相关产品推荐

