5

私はこの単純なプログラムと少し混乱しています。配列で 3 番目に大きい no を見つける必要があります。いくつかのコードを実行しましたが、3 番目に大きい no で 2 番目に大きいものしか得られないので、この解決策の何が問題なのか教えてください。

class ArrayExample {
    public static void main(String[] args) {
        int secondlargest = Integer.MIN_VALUE;
        int thirdlargest = Integer.MIN_VALUE;
        int largest = Integer.MIN_VALUE;
        Scanner input = new Scanner(System.in);
        System.out.println("Enter array values: ");
        int arr[] = new int[5];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = input.nextInt();
            if (largest < arr[i]) {
                secondlargest = largest;
                largest = arr[i];
            }
            if (secondlargest < arr[i] && largest != arr[i]) {
                thirdlargest = secondlargest;
                secondlargest = arr[i];
                if (thirdlargest < arr[i] && secondlargest != arr[i])
                    thirdlargest = arr[i];
            }

        }
        System.out.println("Second Largest number is: " + secondlargest
                + "\nThird largest number is=====" + thirdlargest);
    }
}
4

13 に答える 13

12

私はこのようなことを試してみます:

if (largest < ar[i]) {
    thirdlargest = secondlargest;
    secondlargest = largest;
    largest = arr[i];
} else if (secondlargest < ar[i]) {
    thirdlargest = secondlargest;
    secondlargest = ar[i];
} else if (thirdlargest < ar[i]) {
    thirdlargest = ar[i];
}

テストされていませんが、2 番目の IF はもう必要ないと思います。

コードの説明:

入力した数値が最大値より大きい場合、3 番目、2 番目、1 番目に大きい値を 1 レベル上に移動することを確認しています。入力した値が 2 番目に大きく、最大より小さい場合、3 と 2 を 1 レベル上に移動します。入力した値が 3 番目に大きく、2 番目に小さい場合は、3 番目に大きい値を入力した値に移動します。

于 2012-09-05T10:48:52.383 に答える
4

コレクション API。次に例を示します。

    List list = Arrays.asList(new Integer[] {1, 2, 29, 4, 28, 6, 27, 8});
    Collections.sort(list);
    System.out.print(list.get(list.size()-3));
于 2012-09-05T11:13:15.620 に答える
2
        if(firstLargest<array[num])
        {
            thirdLargest=secondLargest;
            secondLargest=firstLargest;
            firstLargest = array[num];
        }

        else if((secondLargest<array[num])&&(array[num]!=firstLargest))
        {
            thirdLargest=secondLargest;
            secondLargest = array[num];
        }

        else if((thirdLargest<array[num])&&(array[num]!=secondLargest))
        {
            thirdLargest = array[num];
        }
于 2014-06-24T23:56:05.520 に答える
1

そのコードを機能させたいのなら、問題はここにあると思います:

 if (secondlargest < arr[i] && largest != arr[i]) {
                thirdlargest = secondlargest;
                secondlargest = arr[i];
                if (thirdlargest < arr[i] && secondlargest != arr[i])
                    thirdlargest = arr[i];
            }

問題は、thirdLargestをsecondLargestに設定していることです。これは、すでにarr[i]未満として識別されています。次に、thirdLargestがarr [i]未満であるかどうかをテストし(外部条件内で2番目に大きいように設定されているため、これが保証されます)、次にarr[i]に設定します。削除してみてください

if (thirdlargest < arr[i] && secondlargest != arr[i])
                        thirdlargest = arr[i];

それでもうまくいかない場合は、arr [i]がsecondGreatest未満で、thirdGreatestより大きい場合をカバーするために、3番目の個別の条件を追加してみてください。(上記のイェンスの答えを参照)、次のようなもの:

于 2012-09-05T10:59:56.720 に答える
1

Integer配列を使用してから、を使用して並べ替えCollections、必要な要素を選択するだけです。

コード:

System.out.println("Enter array values: ");
Integer arr[] = new Integer[5];
for (int i = 0; i < arr.length; i++) {
            arr[i] = input.nextInt();
}
List<Integer> list = Arrays.asList(arr);
Collections.sort(list);
System.out.println(list);

出力は次のとおりです。

[0, 1, 2, 3, 6]

したがって、3番目に大きい数をとして選択しますlist.get(list.size()-3))

コレクションを逆ソートすることもできます。ドキュメントを確認してください。

于 2012-09-05T10:54:29.720 に答える
1

Java リストを使用して、並べ替えます。3番目の要素を取ります。

java.util.Collections.sort()

于 2012-09-05T10:46:58.617 に答える
1
for (int i = 0; i < arr.length; i++)
 {
        arr[i] = input.nextInt();
        if (largest < arr[i]) {
            secondlargest = largest;
            largest = arr[i];
            continue;
        }
        if (secondlargest <= arr[i] && largest > arr[i])
        {
            thirdlargest = secondlargest;
            secondlargest = arr[i];
            continue;
        }
        if (thirdlargest <= arr[i] && secondlargest > arr[i])
        {
                thirdlargest = arr[i];
        }

 }
于 2012-09-05T10:52:52.153 に答える
0

配列全体を巡回して、最大の 3 つの数値を追跡するだけです。

または、並べ替えてから、上から 3 番目の要素を返すこともできます。

于 2012-09-05T10:46:16.933 に答える
0

このコードを試して、

public static void main(String[] args) {

    int arr[] = {67, 56, 87, 42};

    for (int i = 0; i <arr.length - 1; i++) {
        if (arr[i] < arr[i + 1]) {
            int swap = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = swap;       
        }
    }

    System.out.println("third highest element is: " + arr[2]);
}   
于 2016-04-20T07:07:52.433 に答える
0

配列を読み込んだら、配列で Arrays.sort(array) を呼び出すだけです(あなたの場合は Arrays.sort(arr); )。これにより昇順でソートされ、要素 arr.length-2 を取得できます

詳細はこちら: http://www.homeandlearn.co.uk/java/sorting_arrays.html

例:

    Scanner input = new Scanner(System.in);
            System.out.println("Enter array values: ");
            int arr[] = new int[5];
            for (int i = 0; i < arr.length; i++) {
                arr[i] = input.nextInt();
        }
    Arrays.sort(arr);
System.out.println("Second Largest number is: " + arr[4]
                + "\nThird largest number is=====" + arr[3]);
于 2012-09-05T10:51:24.817 に答える