Java二维数组冒泡排序输出异常及逻辑错误修复求助
二维数组冒泡排序Bug定位与修复
问题汇总
- 输出问题:直接打印二维数组对象
matrix,输出的是数组内存地址而非元素值;打印循环没有换行逻辑,输出格式混乱。 - 循环逻辑错误:冒泡排序第三层循环将变量自增写错为
y++,而非内层循环变量t的自增,导致排序逻辑完全失效。 - 排序范围错误:现有逻辑仅对每行单独排序,无法实现全局所有元素排序后按行输出的需求。
- 类名不合法:Java类名不能以数字开头,
2dsort不符合命名规范,编译会报错。 - 变量兼容性问题:使用
var声明变量仅Java 10及以上版本支持,兼容性较差。
修复后完整代码
import java.util.Scanner; // 修改类名为合法Java标识符 public class TwoDimensionalSort { public static void main(String args[]) { Scanner sc = new Scanner(System.in); System.out.print("Please enter number of rows: "); int row = sc.nextInt(); System.out.print("Please enter number of columns: "); int col = sc.nextInt(); int[][] matrix = new int[row][col]; int total = row * col; // 存储所有元素做全局排序的一维数组 int[] allElements = new int[total]; int index = 0; System.out.print("Please enter " + total + " numbers to sort: "); for(int x = 0; x < row; x++) { for(int y = 0; y < col; y++) { matrix[x][y] = sc.nextInt(); allElements[index++] = matrix[x][y]; } } // 对一维数组做标准冒泡排序 for (int i = 0; i < total - 1; i++) { for (int j = 0; j < total - i - 1; j++) { if (allElements[j] > allElements[j+1]) { int temp = allElements[j]; allElements[j] = allElements[j+1]; allElements[j+1] = temp; } } } // 排序后按行回填到二维数组 index = 0; for(int x = 0; x < row; x++) { for(int y = 0; y < col; y++) { matrix[x][y] = allElements[index++]; } } System.out.println("Sorted numbers:"); for(int x = 0; x < matrix.length; x++) { for (int y = 0; y < matrix[x].length; y++) { // 打印对应下标的元素,而非数组对象 System.out.print(matrix[x][y] + " "); } // 每行打印完成后换行 System.out.println(); } sc.close(); } }
修改说明
- 命名规范修正:将类名从
2dsort改为TwoDimensionalSort,符合Java类名命名规则。 - 输出逻辑修正:打印时指定二维数组的行、列下标
matrix[x][y]输出实际元素值,每行打印完成后添加换行逻辑,符合输出格式要求。 - 排序逻辑修正:先把二维数组所有元素取出存入一维数组,对一维数组做标准冒泡排序后再按顺序回填到二维数组,实现全局元素排序后按行输出的效果。
- 代码健壮性优化:所有循环都添加花括号,避免因缩进问题导致的逻辑错误;最后添加
sc.close()关闭输入流,避免资源泄漏;将var改为int声明变量,兼容所有Java版本。
内容的提问来源于stack exchange,提问作者Nico Ni
相关产品推荐
相关产品推荐

