簡體   English   中英

最大和第二大數字從java中的整數數組獲取相同的值?

[英]largest and second largest number getting same value from integer array in java?

在這里我寫了代碼來打印數組中最大和第二大的數字。但是當我在數組中兩次最大的數字時,它同時打印最大和第二大的數字。有人可以告訴我我在哪里做錯。我的代碼。

int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
    int largest = arr[0];
    int secondLargest = arr[0];
    // check the condition
    for (int i = 0; i < arr.length; i++) {
        // this condition check for largest number
        if (arr[i] > largest) {
            secondLargest = largest;
            largest = arr[i];

        } else if (arr[i] > secondLargest) {
            secondLargest = arr[i];

        }
    }
    // print the result
    System.out.println("second largest number is:" + secondLargest);
    System.out.println("largest number is:" + largest);

輸出為:

second largest number is:96
largest number is:96

有兩個問題:

1)最大和第二大的初始化(使用Integer.MIN_VALUE); 您要在第一次迭代中設置第二個最大值,它是數組中最大的數字

2)設置secondLargest的條件; 您還應該檢查:arr [i] <最大

    int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
    int largest = Integer.MIN_VALUE;
    int secondLargest = Integer.MIN_VALUE;
    // check the condition
    for (int i = 0; i < arr.length; i++) {
        // this condition check for largest number
        if (arr[i] > largest) {
            secondLargest = largest;
            largest = arr[i];
        } else if (arr[i] > secondLargest && arr[i] < largest) {
            secondLargest = arr[i];
        }
    }

輸出:

second largest number is:92
largest number is:96

您正在將largestsecondLargest初始化為數組的第一個元素,因此,如果第一個元素已經是最大的,則兩個元素最后都將擁有最大的元素。

更好的初始化方法是將它們設置為一個很小的值:

int largest = Integer.MIN_VALUE;
int secondLargest = Integer.MIN_VALUE;
int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};

有兩個值為96的數字。因此,在96> 96失敗后,它將變為arr [i]> secondLargest的條件,並通過了該測試。 這就是為什么您將最大號和第二個最大數設為相同的數字96的原因。

這是使用binarySearch的解決方案

int arr[] = {96, 1, 23, 47, 81, 92, 52, 48, 56, 66, 65, 96, 81, 6};
Arrays.sort(arr);
int largest = arr[arr.length - 1];
int binarySearch = Arrays.binarySearch(arr, largest);
System.out.println("largest        = " + largest);
// need to handle the case for arrays which are...
// - empty
// - contain only one int
// - the largest int is on index zero
System.out.println("second largest = " + arr[binarySearch - 1]);

暫無
暫無

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

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