簡體   English   中英

如何獲得二維數組中的整體最大值?

[英]How do I get the overall maximum value in a 2d array?

我試圖讓程序接受用戶的輸入,然后將其放入二維數組中,然后我希望它從所有數字中找到總體最大數字並打印出來。 我對 2d arrays 不太了解,所以我不知道邏輯錯誤在哪里。

這是我的代碼:

import java.util.Scanner;

public class ToDoTwo {
    public static void main(String args[]) {
        int numbers[][] = new int[3][3], max[][] = new int[3][3], n, temp;
        Scanner obj = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                System.out.println("Enter a number : ");
                numbers[i][j] = obj.nextInt();
            }
        }
        max[0][0] = numbers[0][0];
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if (numbers[i][j] > max[0][0]) {
                    max[0][0] = numbers[i][j];
                }
            }
        }
        for (int i = 0; i < max.length; i++) {
            for (int j = 0; j < max.length; j++) {
                System.out.print(max[i][j]);
            }
        }
    }
}

您的程序或多或少可以按您的意願工作,但絕對可以改進。 結果當前僅顯示附加了 8 個零。 發生這種情況是因為您正在循環max以進行打印,並且實際上只設置了第一個條目。

關於如何改進的建議:

  • 使用單個 integer ( int max = 0; ) 來存儲結果最大值。 為此不需要數組。
  • 不要在同一行寫多個聲明,因為 Java 和潛在的錯誤來源(難以閱讀)不鼓勵這樣做。
  • Scanner的實例指定一個有意義的名稱(例如, scanner )而不是obj
  • 使用numbers.lengthnumbers[0].length而不是硬編碼的數字,以避免以后更改范圍時出現問題。
  • 使用 Java 樣式的數組聲明 ( int[] name ) 而不是 C 樣式的數組聲明 ( int name[] )。

您的整個 class 可能如下所示:

import java.util.Scanner;

public class ToDoTwo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int[][] numbers = new int[3][3];
        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers[0].length; j++) {
                System.out.println("Enter a number : ");
                numbers[i][j] = scanner.nextInt();
            }
        }
        int max = 0;
        for (int i = 0; i < numbers.length; i++) {
            for (int j = 0; j < numbers[0].length; j++) {
                if (numbers[i][j] > max) {
                    max = numbers[i][j];
                }
            }
        }
        System.out.println(max);
    }
}

如果不需要在單獨的步驟中計算最大值,則可以將 if 語句直接放在第一個循環中。

import java.util.Scanner; public class ToDoTwo { public static void main(String args[]) { int numbers[][] = new int[3][3], max[][] = new int[3][3], n, temp; Scanner obj = new Scanner(System.in); for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { System.out.println("Enter a number : "); numbers[i][j] = obj.nextInt(); } } int maxVal = -Integer.MIN_VALUE; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (numbers[i][j] > maxVal) { maxVal = numbers[i][j]; } } } System.out.println(maxVal); } }

您可以使用大大簡化您的代碼:

int[][] arr = {{1, 2, 3}, {5, 4}, {32, 23}};

int max = Arrays.stream(arr).flatMapToInt(Arrays::stream)
                .max().orElse(Integer.MIN_VALUE);

System.out.println(max); // 32

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM