Java将数组按网格打印时输出与预期不符的问题排查
问题分析
- 第一是二维数组赋值逻辑错误:嵌套循环中直接修改外层循环变量
i,破坏了循环计数逻辑,且gridNum的取值索引计算完全错误,没有按照预期的列优先规则填充网格。 - 第二是语法不完整:代码中多个循环、方法的闭合大括号缺失,无法正常编译运行。
- 第三是输出对齐逻辑有瑕疵:字符串拼接搭配
printf的使用方式不规范,空格计算错误会导致列对齐错位。
修复方案
核心逻辑调整
你需要的是列优先填充规则:先填完第一列的所有行,再填第二列的所有行,因此gridNum的索引应按照列号 * 总行数 + 行号的公式计算。
修复后完整代码
public void printCardAsGrid(String numbers) { String[] gridNumbers = numbers.split(" "); int[] gridNum = new int[gridNumbers.length]; for (int x = 0; x < gridNumbers.length; x++) { gridNum[x] = Integer.parseInt(gridNumbers[x]); } int[][] cardGrid = new int[currentRowSize][currentColumnSize]; for (int i = 0; i < currentRowSize; i++) { for (int j = 0; j < currentColumnSize; j++) { // 列优先索引计算:第j列第i行对应原数组的 j*总行数 +i 位置 cardGrid[i][j] = gridNum[j * currentRowSize + i]; } } // 优化打印对齐逻辑,直接用格式化输出更简洁 for (int[] row : cardGrid) { for (int num : row) { System.out.printf("%2d ", num); } System.out.println(); } }
效果验证
输入1 16 13 18 14 23,且currentRowSize=3、currentColumnSize=2时,输出结果为:
1 18 16 14 13 23
和预期效果完全一致。
内容的提问来源于stack exchange,提问作者Causeeu
相关产品推荐
相关产品推荐

