2017-03-21 10 views
-1
int largest = 0; 
int secondLargest = 0; 

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


int[] array2 = {2, 4, 6, 8, 10, 12, 14}; 

このコードでは、配列内の値を比較し、2つの最大値を返します。配列内の2つの最大値を返す

値が0に初期化されていると、このループがどのようにループするのか分かりません。私はデバッグを使ってeclipseで試しましたが、まだ何が起こっているのか分かりません。

誰かがこれを詳細に説明することができますか、ステップバイステップで、ここで何が起こりますか?

+0

すべての整数が正であると仮定しています。もしそれらがすべて '-100'(例えば)であれば、最大値として' 0'を返します。 – byxor

答えて

0

(など、負の数の点で)より安全で、おそらくソリューションを理解しやすいが、リストに配列を変換し、逆の順序でそれをソートし、その後、ちょうど最初の2つの要素

を取ることであろう
int[] a = {2, 4, 6, 8, 10, 12, 14}; 
List<Integer> f = IntStream.of(a).boxed().collect(Collectors.toList()); 
f.sort(Comparator.reverseOrder()); 
System.out.println(f.get(0) +" - " + f.get(1)); 

DEMO

1

このコードは、アレイ内のすべての値が正の整数であると仮定しています。

アレイがゼロに初期化されても、アレイを通過しますが、値は変更されません。

私たちは一歩一歩進ん場合:forループ

  • を配列内の要素ごとに読み込みます。

  • 現在の要素(2)は、我々はこの場合2に(まだ)、(最初の実行では、0だ。従って最初の値を()largestに割り当てられているがわかった。

  • 大きい方よりも大きい場合
  • はその後、それがその後、それが再び比較を行い、次の要素(4)、にジャンプしますsecondLargest
  • として(0ここでは)現在の最大を保存します。今
  • それは 4 > 2として最大規模に 4を割り当てます
  • secondLargest2となります。
  • これは配列が終了するまで続きます。
関連する問題