2016-11-29 19 views
-1

私の配列の中で2番目に大きい番号を見つけることに問題があります。それは、すべての私の例では機能しません。 私はキーボードから数値を読み込んだ後、メソッドをテストに入れ、次にソートします。例:(ユーザーが入力した)1,2,3,4,5,6,7,8,9,10 exit:10,9、.. 3,2,1 今度は、forループで2番目に大きい番号を表示したい。 **タスクは次のとおりです。可能であればCW( "エラー") **配列の2番目の最大値を見つける

in codeコメント//ここでコードの一部を正しい方法で書く方法がわかりません。

私は私の問題は、理にかなって願ってい

...

public static int test(int[] polje) 
    { 

     int temp = 0; 
     Console.WriteLine(); 
     for (int c = 0; c < polje.Length; c++) 
     { 
      for (int b = c + 1; b < polje.Length; b++) 
      { 
       if (polje[c] > polje[b]) 
       { 
        temp = polje[c]; 
        polje[c] = polje[b]; 
        polje[b] = temp; 

       } 

      } 

     } 

     int secondlargest = 0; 



     //HERE 

     for (int i = polje.Length - 1; i >= 0; i--) 
     { 
      if (polje[polje.Length - 2] == polje[polje.Length - 1] || polje[polje.Length - 2] == 0) 
      { 
       Console.WriteLine("Wrong!"); 
       break; 
      } 
      else 
      { 
       Console.WriteLine("Second largest number is :{0}", polje[polje.Length - 2]); 
       secondlargest = polje[polje.Length - 2]; 
       break; 
      } 
     } 


     return secondlargest; 

    } 
    static void Main(string[] args) 
    { 

     int[] polje = new int[10]; 
     Console.WriteLine("Enter values"); 
     for (int i = 0; i < 10; i = i + 1) 
     { 

      polje[i] = int.Parse(Console.ReadLine()); 
      if (polje[i] == 0) 
      { 
       break; 
      } 
     } 
     test(polje); 

     Console.ReadLine(); 
    } 
} 

}

+1

この宿題はありますか?リストと並べ替え、またはLINQとOrderByDescendingとTake(2)を使用して2つの最大値を取得するためです。 –

+0

既にソートしている場合は、2番目のforループのポイントは何ですか?昇順または降順の並べ替えによって、配列に2つ以上のレコードがある限り、配列の2番目のインデックスまたは2番目の最後のインデックスを選択できます。 – RizJa

+3

http://stackoverflow.com/questions/14810444/find-the-second-maximum-number-in-an-array-with-the-smallest-complexity – Damith

答えて

3

それは非常に簡単です:

var secondMaxValue = yourArray.OrderByDescending(x=> x).Skip(1).FirstOrDefault(); 
+4

なぜdownvote?これは素晴らしい方法です。 – Grax

+0

おそらく 'using System.Linq;'が必要であると言及してください。 – Grax

+1

2つの同じ番号があり、それを望まない場合は、Distinct()を使用できます。しかし、その場合には正確に何が必要なのかという問題は説明されていない。 –

0
int GetSecondLargest(int[] a){ 
    int a0,b0; 
    for(int i = 0; i <a.Length;i++){ 
      if(a[i] > a0){ 
        b0 = a0; 
        a0 = a[i]; 
      }else if(a[i] > b0) b0 = a[i]; 
    } 
    return b0; 

編集:書式設定はひどいですが、アイデアがありますあなたは最大の価値を保ち、その代わりに基本的な条件文を使ってその価値を得ることができます。 Linqは必要ありません。

+0

あなたは 'else if(a [i]> b0)b0 = a [i];' – juharr

+0

がありません。 – maximdumont

関連する問題