[英]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
以進行打印,並且實際上只設置了第一個條目。
關於如何改進的建議:
int max = 0;
) 來存儲結果最大值。 為此不需要數組。scanner
)而不是obj
。numbers.length
和numbers[0].length
而不是硬編碼的數字,以避免以后更改范圍時出現問題。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.