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

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();
    }
}

修改说明

  1. 命名规范修正:将类名从2dsort改为TwoDimensionalSort,符合Java类名命名规则。
  2. 输出逻辑修正:打印时指定二维数组的行、列下标matrix[x][y]输出实际元素值,每行打印完成后添加换行逻辑,符合输出格式要求。
  3. 排序逻辑修正:先把二维数组所有元素取出存入一维数组,对一维数组做标准冒泡排序后再按顺序回填到二维数组,实现全局元素排序后按行输出的效果。
  4. 代码健壮性优化:所有循环都添加花括号,避免因缩进问题导致的逻辑错误;最后添加sc.close()关闭输入流,避免资源泄漏;将var改为int声明变量,兼容所有Java版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:15:03