Can't see me
Can't see me

Reputation: 501

array elements, arranging and identifying elements

How can I find the 2nd largest element in the array, Here is my code but I can't figure out the problem, help would be much appreciated

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;


}}

Upvotes: 0

Views: 87

Answers (3)

Prabhakaran Ramaswamy
Prabhakaran Ramaswamy

Reputation: 26094

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

Please replace with the following.

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

Little optimized version of your methods.

    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;   
    }

Upvotes: 3

Akhilesh Singh
Akhilesh Singh

Reputation: 2586

Start with asking why is break required in your code of finding the second largest number? Essentially, can you find second largest number without looking at all numbers in a list ?

Then, to understand a general solution for finding kth element in a list without sorting, look at http://pine.cs.yale.edu/pinewiki/QuickSelect.

Upvotes: 0

Masudul
Masudul

Reputation: 21961

Change your getSecondLargest() code like:

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

}

Upvotes: 0

Related Questions