2013-09-07 15 views
5

Ho cercato ovunque una soluzione per trovare il secondo numero più grande, ma ho trovato una soluzione in tutti i siti, ed è sbagliato.Il secondo numero più grande

Il codice che ho trovato:

public static void main(String[] args) { 
    int arr[] = { 1, 23, 47, 81, 92, 88, 52, 48, 56, 66, 65, 76, 71, 85, 
        49, 53, 56, 61, 65, 84 }; 
    secondLargeNumber(arr); 
} 

public static void secondLargeNumber(int[] arr) { 
    int largest = arr[0]; 
    int secondLargest = arr[0]; 
    for (int i = 0; i < arr.length; i++) { 
     if (arr[i] > largest) { 
      secondLargest = largest; 
      largest = arr[i]; 
     } else if (arr[i] > secondLargest) { 
      secondLargest = arr[i]; 
     } 
    } 
    System.out.println("second largest in array is:" + secondLargest); 

} 

Il codice funziona bene, ma se ho cambiato la sequenza di ingresso:

int arr[] = { 11, 10, 11, 2, 3, 4, 5, 6, 7, 8}; 

l'uscita sarà:

second largest in array is:11 

I davvero non so cosa fare!

+0

Ordina l'array - allora ciclo – Randy

+6

@Randy - Ordinamento l'intera matrice per trovare il secondo maggior numero è eccessivo. –

+2

Questo non ha senso. '11' è ancora il primo più grande, solo che si è verificato due volte. Il secondo più grande è sicuramente '10'. – adarshr

risposta

0
public static void secondLargeNumber(int[] arr) { 
      int largest = Integer.MIN_VALUE; 
      int secondLargest = Integer.MIN_VALUE; 
      for (int i = 0; i < arr.length; i++) { 
       if (arr[i] > largest) { 
         secondLargest = largest; 
         largest = arr[i]; 

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

       } 
      } 
      System.out.println("second largest in array is:" + secondLargest); 

    } 
+0

stesso, "il secondo più grande nell'array è: 11" dovrebbe essere 10! –

+0

@DuaaIsaa E inizializza i valori con 'Integer.MIN_VALUE' –

7

Basta fare:

else if (arr[i] > secondLargest && arr[i] != largest) { 
    secondLargest = arr[i]; 
} 
0

Il problema viene da qui: -

int largest = arr[0]; 
int secondLargest = arr[0]; 

Provare a inizializzare le variabili con il minor numero come questo:

int secondlargest = Integer.MIN_VALUE; 
int largest = Integer.MIN_VALUE; 

Che ne dici di questo: -

int secondlargest = 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]) 
       secondlargest = arr[i]; 
     } 
0

avete bisogno di due aggiunte:!

  1. come altri posti hanno suggerito = grande controllo
  2. Se sia più grande e secondlargest Iniziamo con lo stesso valore, passare il secondlargest ad un valore inferiore al più presto.

     for (int i = 0; i < arr.length; i++) { 
          if (arr[i] > largest) { 
            secondLargest = largest; 
            largest = arr[i]; 
    
          } else if (arr[i] > secondLargest && arr[i]!=largest) { 
            secondLargest = arr[i]; 
    
          }else if(largest==secondLargest){ 
           secondLargest = arr[i]; 
          } 
         } 
    
Problemi correlati