0

如何找到数组中的第二大元素,这是我的代码,但我无法找出问题所在,非常感谢帮助

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

首先要问为什么在查找第二大数字的代码中需要中断?本质上,您可以在不查看列表中的所有数字的情况下找到第二大数字吗?

然后,要了解在列表中查找第 k 个元素而不进行排序的通用解决方案,请查看http://pine.cs.yale.edu/pinewiki/QuickSelect

于 2013-09-26T06:30:30.077 回答