簡體   English   中英

如何遍歷數組並找到最大值:Java

[英]How to iterate through array and find highest value: Java

在 Bellow 代碼中,我應該找到與最大數字相關的月份。

波紋管是我試過的。 但是我相信有一種更簡潔的方式來寫這個。 我怎樣才能做到這一點?

public class HelloWorld{

static int[] array = {3,6,7,3,2,30,9,13,12,1,2,1};
static String[] month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

static int greatestVal = 0;
static int greatestVal2 = 0;
static String monthChosen = "";

int integer = 0;
static int num = 0;

     public static void main(String []args){
            int number = -1;
            for (int i = 0; i<=11; i++) {
                int currentValue = array[i];
                number += 1;
                //System.out.println(currentValue);
                for (int index = 0; index <=11; index++) {
                    if (currentValue > array[index]) {
                        greatestVal = currentValue;
                        // System.out.println(currentValue +">"+ array[index]);
                        if (greatestVal > greatestVal2) {
                            greatestVal2 = greatestVal;
                            monthChosen = month[number];
                        }
                    } else {
                        // System.out.print("Hgfhdssdgfadkhfdshkjhads");
                    }
                }
        }
            System.out.println(greatestVal2 + " greatest month is: " + monthChosen);
    }
}

使用流:

static int[] array = {3,6,7,3,2,30,9,13,12,1,2,1};
static String[] month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

public static void main(String[] args) {
    int index = IntStream.range(0, array.length)
            .reduce(0, (a, b) -> array[a] >= array[b] ? a : b);
    System.out.println(array[index] + " greatest month is: " + month[index]);
}

您實際上並不需要為每次迭代跟蹤所選月份。 假設月份通過索引與數組元素相關,您只需要找出最大元素的索引 - 您甚至不需要跟蹤最大值:

public class HelloWorld {
    static int[] array = {3, 6, 7, 3, 2, 30, 9, 13, 12, 1, 2, 1};
    static String[] month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

    public static void main(String[] args) {
        int index = 0;
        for (int i = 1; i < array.length; i++)
            if (array[index] < array[i])
                index = i;
        System.out.println(array[index] + " greatest month is: " + month[index]);
    }
}

如果您可以使用Map那么它非常簡單。 創建一個HashMap<String, Integer> ,其中key是月份, value是計數。

然后,您可以遍歷此映射並找到值最大的鍵值對。

解決方案 :

    Map<String, Integer> monthMap = new HashMap<>();
    // initializing the map
    for (int i = 0; i < 12; i++)
        monthMap.put(month[i], array[i]);

    // finding <k, v> pair with highest entry
    Entry<String, Integer> entry = monthMap.entrySet().stream()
             .max(Map.Entry.comparingByValue(Comparator.comparingInt(i -> i.intValue())))
             .get();

僅使用您的 2 個陣列的簡化解決方案...

    int max = Arrays.stream(array).max().getAsInt();
    int index = 0;
    for (int i = 0; i < array.length; i++) {
        if (array[i] == max) {
            index = i;
        }
    }
    System.out.println(array[index] + " greatest month is: " + month[index]);
   public static void main(String []args){
        Integer[] array = {3,6,7,3,2,30,9,13,12,1,2,1};
        String[] month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

        Integer[] copyArr = array.clone();
        Arrays.sort(copyArr);
        int largestNum = copyArr[copyArr.length-1];
        int index = Arrays.binarySearch(array, largestNum);
        System.out.println(month[index]);
     }

輸出 -> 六月

在 Java 中,我們有枚舉,您可以在其中擁有常量和與之關聯的值。 參考https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

使用該方法,您可以定義一個枚舉,其中名稱為月份,值可以與它們相關聯。

現在在任何其他方法中,您可以繼續迭代枚舉值,然后找到最大值。 因此,假設 Months 是枚舉的名稱,那么您可以for-each使用一個簡單的for-each循環:

for (Months months:Months.values()){
  //logic for comparison.find the maximum
}

注意:ENUMS 通常用於常量。所以不確定所描述的問題是否總是每個月都有常量值,或者它可能會有所不同。如果它有所不同,那么您可以按照已經給出的答案中的描述使用streamsMaps

暫無
暫無

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

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