[英]Finding minimum and maximum in Java 2D array
我一直在努力解決這個問題,需要一些幫助。 我需要找到最小/最大值並將它們打印出來用於多維數組。 這是我嘗試過的兩種方法。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}};
Arrays.sort(data);
System.out.println("Minimum = " + data[0]);
System.out.println("Maximum = " + data[data.length - 1]);
}
}
此版本符合但不運行。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}};
public static int getMaxValue(int[] numbers) {
int maxValue = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] > maxValue) {
maxValue = numbers[i];
}
return maxValue;
{
public static int getMinValue (int[] numbers) {
int minValue = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (numbers[i] < minValue) {
minValue = numbers[i];
}
}
return minValue;
}
這個版本只是在編譯時給我帶來了一堆錯誤。 非常感謝任何幫助。
好的,我已經修復了你的代碼。 實際上你的錯誤是你沒有遍歷多維數組的所有單元格。
因此,我在 getMinValue/getMinValue 方法和固定數組元素尋址中添加了額外的循環。
import java.util.*;
class MinMax {
public static void main(String[] args) {
int[][] data = {
{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8}
};
System.out.println(getMaxValue(data));
System.out.println(getMinValue(data));
}
public static int getMaxValue(int[][] numbers) {
int maxValue = numbers[0][0];
for (int j = 0; j < numbers.length; j++) {
for (int i = 0; i < numbers[j].length; i++) {
if (numbers[j][i] > maxValue) {
maxValue = numbers[j][i];
}
}
}
return maxValue;
}
public static int getMinValue(int[][] numbers) {
int minValue = numbers[0][0];
for (int j = 0; j < numbers.length; j++) {
for (int i = 0; i < numbers[j].length; i++) {
if (numbers[j][i] < minValue ) {
minValue = numbers[j][i];
}
}
}
return minValue ;
}
}
我有一個使用 Java 8 的更有趣的解決方案 :)
IntSummaryStatistics stats = Arrays.stream(data).flatMapToInt(Arrays::stream).collect(Collectors.summarizingInt(Integer::intValue));
int max = stats.getMax();
int min = stats.getMin();
顯然,這與您的解決方案不同。 但它做同樣的事情。 首先,我們將 2D 數組轉換為int
的Stream
。 為了首先做到這一點,我們需要調用flatMapToInt
。 我們這樣做是為了以扁平的方式流式傳輸數組中的所有元素。 想象一下,如果我們只是開始使用單個索引來遍歷整個 2D 數組。 就是這樣。 一旦我們將數組轉換為流,我們將使用 IntSummaryStatistics 以便為 min 和 max 重用相同的流。
您的問題是:您正在對int
數組的數組進行排序,而不是對每個int
數組中的每個單獨的int
進行排序。
通過每個循環:為了解決這個int
的陣列中的陣列int
陣列。
使用Arrays.sort()
查找 2D int
數組的最大值和最小值的說明:
int
數組以對調用的data
進行排序。int
,一個保存最大值,另一個保存最小值。
Integer.MIN_VALUE
和最小的初始值應該是Integer.MAX_VALUE
,以確保負值處理。0
到data.length
data
:
data[i]
data[i]
的第一個值是否小於最小值,如果是則更改它。data[i]
的最后一個值是否大於最大值,如果是則更改它。示例:
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[][] data = {{3, 2, 5},
{1, 4, 4, 8, 13},
{9, 1, 0, 2},
{0, 2, 6, 3, -1, -8} };
int maximum = Integer.MIN_VALUE;
int minimum = Integer.MAX_VALUE;
for(int i = 0; i < data.length; i++) {
Arrays.sort(data[i]);
if(data[i][0] < minimum) minimum = data[i][0];
if(data[i][data[i].length - 1] > maximum) maximum = data[i][data[i].length - 1];
}
System.out.println("Minimum = " + maximum);
System.out.println("Maximum = " + minimum);
}
}
package array;
public class Max_number {
// 2 5 7 9
// 3 6 8 1
public static void main (String[] arg) {
int a[][] = {{2,5,7,9},{3,6,8,1}};
int max=a[0][0];
for (int i=0; i<2; i++) //row
{
for (int j=0; j<4; j++) //coloum
{
if(a[i][j]>max)
{
max=a[i][j];
}
}
}
System.out.println("maximum number is"+max);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.