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

Java二维矩阵首个最大值位置查找代码故障求助及修正

问题分析与代码修正

我看了你的代码,发现两个核心问题导致无法正确输出第一个最大值的位置:

  • 最大值初始化错误:你把max初始化为0,如果矩阵里的元素全是负数,这个初始值会比所有元素都大,导致找不到真正的最大值。
  • 最后一轮循环的逻辑漏洞:内层循环里的break放在了if判断外面,这意味着不管当前元素是不是最大值,内层循环只执行一次(j=0的时候就直接退出了),根本没法遍历每行的后续元素。

修正后的完整代码

import java.util.Scanner;
class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[][] matrix = new int[n][m];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = sc.nextInt();
            }
        }
        
        // 修正1:用矩阵第一个元素初始化最大值,适配所有数值场景
        int max = matrix[0][0];
        // 遍历矩阵找出最大值
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matrix[i][j] > max) {
                    max = matrix[i][j];
                }
            }
        }
        
        // 修正2:调整循环逻辑,找到第一个最大值后立即终止所有遍历
        boolean found = false;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (matrix[i][j] == max) {
                    System.out.print(i + " " + j);
                    found = true;
                    break; // 找到当前行的目标,退出内层循环
                }
            }
            if (found) {
                break; // 已经找到第一个最大值,退出外层循环
            }
        }
        sc.close(); // 记得关闭Scanner,养成良好习惯
    }
}

关键修正说明

  1. 最大值初始化:改用matrix[0][0]作为max的初始值,确保无论矩阵元素是正数、负数还是零,都能从矩阵实际存在的元素开始比较,避免初始值干扰。
  2. 循环逻辑修复:添加found布尔标记,当找到第一个匹配最大值的元素时,先打印位置,标记为已找到,然后依次退出内层和外层循环,保证只会输出第一个出现的最大值位置,不会继续遍历后续元素。

如果你想进一步优化,可以把找最大值和找位置合并成一次遍历,减少一次矩阵扫描,比如:

// 合并遍历的优化版本
int max = matrix[0][0];
int maxI = 0, maxJ = 0;
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        if (matrix[i][j] > max) {
            max = matrix[i][j];
            maxI = i;
            maxJ = j;
        }
    }
}
System.out.print(maxI + " " + maxJ);

这个版本只需要遍历矩阵一次,效率更高,同时也能直接记录第一个最大值的位置(因为只有当遇到更大的值时才更新位置,第一次出现的最大值会被保留到最后)。

内容的提问来源于stack exchange,提问作者Ashu.exe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:24:00