首页 > 解决方案 > 我需要使用 java 在 2D 矩阵中找到第一个最大元素,但代码似乎不像我想要的那样工作。谁能帮我?

问题描述

  1. 如果有多个最大元素,我需要最大元素位置,然后打印第一个。
  2. 我的代码打印最大元素的位置,但不是第一个。
  3. 我不明白为什么最后一次迭代没有按我的预期工作。

请仅使用 Java 解决它。

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        // put your code here
        Scanner sc = new Scanner(System.in);
        
        // define lengths
        int n = sc.nextInt();
        int m = sc.nextInt();
        
        // add length to matrix
        int[][] matrix = new int[n][m];
        
        // insert elements
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = sc.nextInt();
            }
        }
        
        // define max
        int max = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matrix[i][j] > max) {
                    max = matrix[i][j];
                }
            }
            // System.out.print(i + " " + j);
        }
        // System.out.print(max + " ");
        
        // print index of highest element
        // int pos1 = 0;
        // int pos2 = 0;
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < m; ++j) {
                if (matrix[i][j] == max) {
                    System.out.print(i + " " + j); 
                    break;
                }
            // pos2 += 1;
            break;
            }
        // pos1 += 1;
        // break;
        }
    }
}

标签: java

解决方案


不需要两次遍历矩阵。当您搜索最大值时,还要存储找到该最大值的矩阵坐标。代码示例:

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        // put your code here
        Scanner sc = new Scanner(System.in);
        
        // define lengths
        int n = sc.nextInt();
        int m = sc.nextInt();
        
        // add length to matrix
        int[][] matrix = new int[n][m];
        
        // insert elements
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = sc.nextInt();
            }
        }
        
        // define max
        int max = Integer.MIN_VALUE, row=0, col=0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                if (matrix[i][j] > max) {
                    max = matrix[i][j];
                    row=i;
                    col=j;
                }
            }
            
        }
        System.out.print("max: "+max + " is at: ");
        System.out.print(col + " " + row); //indexes starting from zero   
    }
}

推荐阅读