0

配列内の 2 番目に大きい要素を見つけるにはどうすればよいですか。これが私のコードですが、問題がわかりません。助けていただければ幸いです。

import java.util.Arrays;
import java.util.Random;

public class NDlargest
{
    Random random = new Random();
    private int[] array = new int[10];
    private int largest;
    private int largest2;

    public NDlargest()
    {
        largest = 0;
        largest2 = 0;

        for (int i =0; i< array.length; i++)
        {
            array[i] = 1 + random.nextInt(100);
        }
         System.out.println(Arrays.toString(array));
    }

    public int getLargest()
    {

    for (int i = 0; i < array.length; i++)
    {
        int number = array[i];

        if (number > largest)
        { 
            largest = number;
        }
    }
    return largest;
}


   public int getSecondLargest()
   {
       for (int i = 0; i < array.length; i++)
       {
           int number2 = array[i];
           if  (largest2 < largest)
           {
               if (number2 > largest2)
               {
                   largest2 = number2;
                } 
            }
            else
           {

              break;
            }
        }
             return largest2;


}}
4

3 に答える 3

3
       int number2 = array[i];
       // here is the problem
       if  (largest2 < largest) 

以下に置き換えてください。

        int number2 = array[i];
        if  (number2 < largest)

メソッドの少し最適化されたバージョン。

    public int getLargest()
    {

       for (int i = 0; i < array.length; i++)
       {       

           if (array[i] > largest)
           { 
              largest = array[i];
           }
       }
       return largest;
    }


    public int getSecondLargest()
    {
       for (int i = 0; i < array.length; i++)
       {          
           if  (array[i] < largest)
           {
               if (array[i] > largest2)
               {
                   largest2 = array[i];
                } 
            }

        }
        return largest2;   
    }
于 2013-09-26T06:44:28.563 に答える
0

getSecondLargest()コードを次のように変更します。

public int getSecondLargest() {
        Arrays.sort(array);
        largest2=array[array.length-2];
        return largest2;

}
于 2013-09-26T06:27:47.540 に答える
0

2 番目に大きい数を見つけるコードでブレークが必要な理由を尋ねることから始めます。基本的に、リスト内のすべての数値を見ずに 2 番目に大きい数値を見つけることができますか?

次に、ソートせずにリスト内の k 番目の要素を見つけるための一般的な解決策を理解するには、http://pine.cs.yale.edu/pinewiki/QuickSelectを参照してください。

于 2013-09-26T06:30:30.077 に答える