2013-09-07 10 views
5

2番目に大きな数字を見つけるソリューションをどこからでも探しましたが、私はすべてのサイトで1つの解決策を得ました。最大の秒数

私が見つけたコード:

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

} 

コードが正常に動作しますが、私はへの入力シーケンスを変更した場合:

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

出力は次のようになります。

second largest in array is:11 

I本当に何をすべきかわからない!

+0

第一ソートアレイ - 、ループ – Randy

+6

@Randy - 二番目に大きい数が過剰である見つけるために全体の配列をソート。 –

+2

それは意味をなさない。 '11'は依然として第1の大きさであり、2回発生しただけです。 2番目に大きいのは間違いなく「10」です。 – adarshr

答えて

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

同じです、 "配列で2番目に大きい:11" 10でなければなりません! –

+0

@DuaaIsaaそして、「Integer.MIN_VALUE」で値を初期化する –

7

ちょうど行います

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

を問題はここから来ている: -

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

は、このような最小数を使用して変数を初期化するようにしてください:

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

どうですか? -

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

次の2つの追加が必要です!他の記事を示唆しているとして、最大かつsecondlargestの両方が同じ値から始めた場合、最大チェック

  • =

    1. は、できるだけ早く小さな値にsecondlargestを切り替えます。

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