Java二维数组默认零值替换为空白的问题排查求助
解决二维数组零值替换为空白(或指定符号)的问题
我明白你现在的困扰:想让Odds和Evens两个数组里不符合条件的位置(原本是0的地方)显示成[],但之前的写法不仅没替换掉零,还把括号打印到了数组的上方。问题确实出在你else语句的位置和执行时机上,咱们一步步来修正:
问题根源
你在Odds和Evens方法的数组填充循环里,直接用else System.out.printf("%s","[]");打印符号——这会导致在数组还没完全构建好的时候,就提前输出了这些括号,而数组里对应的位置还是默认的0值。等到main方法里统一打印数组时,这些0值依然会被输出,所以就出现了括号在数组上方、零值还在的混乱情况。
修正方案:分离数据填充与展示逻辑
正确的做法是先把数组的数据填充好,然后在打印数组的时候再判断替换零值,这样就能精准控制显示效果。
1. 调整Odds和Evens方法
先去掉这两个方法里的else System.out.printf("%s","[]");,只保留符合条件的赋值逻辑,不符合条件的位置就让它保持默认的0(后续打印时再处理):
比如修改后的Odds方法:
public static int[][] Odds(int x, int y){ int[][]array = new int[x][y]; for (int row= 0; row < array.length; row++){ for (int column=0;column<array[row].length;column++){ if ((row + column)%2 !=0){ array[row][column]=(row+column)*3; } // 去掉else里的打印,不符合条件的位置保持0 } } // 求和逻辑保留不变 int sum = 0; for (int row=0; row < array.length; row++){ for (int column=0; column < array[row].length; column++){ sum = sum + array[row][column]; } } System.out.printf("The total of all the odd numbers added together is: %2d\n", sum); return array; }
Evens方法做同样的修改,去掉else里的打印语句即可。
2. 在main方法打印时替换零值
当你从Odds和Evens方法拿到数组后,在打印循环里判断每个元素的值:如果是0,就打印你想要的[],否则打印数字。这样能保证格式对齐,替换也准确:
比如打印Odds数组的代码:
array = Odds(15,15); for(int row=0; row < array.length; row++){ for(int column=0; column<array[row].length;column++){ if(array[row][column] == 0){ System.out.printf("%4s", "[]"); // 用%4s保证和数字的4字符宽度对齐 } else { System.out.printf("%4d",array[row][column]); } } System.out.printf("\n"); }
Evens数组的打印部分做完全一样的处理即可。
完整修正后的代码
public class arrayprgm1{ public static int[][] Table(int x, int y){ int[][] array = new int[x][y]; for (int row= 0; row < array.length; row++){ for (int column=0;column<array[row].length;column++){ array[row][column]=(row+column)*3; } } int sum = 0; for (int row=0; row < array.length; row++){ for (int column=0; column < array[row].length; column++){ sum = sum + array[row][column]; } } System.out.printf("The total of all the numbers added together is: %2d\n", sum); return array; } public static int[][] Odds(int x, int y){ int[][]array = new int[x][y]; for (int row= 0; row < array.length; row++){ for (int column=0;column<array[row].length;column++){ if ((row + column)%2 !=0){ array[row][column]=(row+column)*3; } } } int sum = 0; for (int row=0; row < array.length; row++){ for (int column=0; column < array[row].length; column++){ sum = sum + array[row][column]; } } System.out.printf("The total of all the odd numbers added together is: %2d\n", sum); return array; } public static int[][] Evens(int x, int y){ int[][] array = new int[x][y]; for (int row= 0; row < array.length; row++){ for (int column=0;column<array[row].length;column++){ if ((row + column)%2 ==0){ array[row][column]=(row+column)*3; } } } int sum = 0; for (int row=0; row < array.length; row++){ for (int column=0; column < array[row].length; column++){ sum = sum + array[row][column]; } } System.out.printf("The total of all the even numbers added together is: %2d\n", sum); return array; } public static void main(String[] args){ int[][]array = new int[15][15]; array = Table(15,15); for(int row=0; row < array.length; row++){ for(int column=0; column<array[row].length;column++){ System.out.printf("%4d",array[row][column]); } System.out.printf("\n"); } System.out.printf("\n"); array = Odds(15,15); for(int row=0; row < array.length; row++){ for(int column=0; column<array[row].length;column++){ if(array[row][column] == 0){ System.out.printf("%4s", "[]"); } else { System.out.printf("%4d",array[row][column]); } } System.out.printf("\n"); } System.out.printf("\n"); array = Evens(15,15); for(int row=0; row < array.length; row++){ for(int column=0; column<array[row].length;column++){ if(array[row][column] == 0){ System.out.printf("%4s", "[]"); } else { System.out.printf("%4d",array[row][column]); } } System.out.printf("\n"); } } }
这样修改后,你就能看到Odds数组里偶数位置显示[],Evens数组里奇数位置显示[],而且格式整齐,不会出现括号乱跑的情况了。
内容的提问来源于stack exchange,提问作者M.Street
相关产品推荐
相关产品推荐

