2016-11-29 9 views
-1

Ich habe ein Problem mit der zweitgrößten Anzahl in meinem Array. Die Sache ist, es funktioniert nicht für alle meine Beispiele. Nachdem ich Zahlen aus der Tastatur gelesen habe, legte ich sie in Methode Test und dann sortiere ich sie .. Beispiel: (Benutzer eingegeben) 1,2,3,4,5,6,7,8,9,10 Ausfahrt: 10,9, .. 3,2,1 Nun möchte ich zweitgrößte Zahl mit for-Schleife anzeigen .. ** Die Aufgabe ist: finden Sie die zweitgrößte Zahl, wenn es möglich ist, wenn nicht CW ("Fehler") **zweiten maximalen Wert in Array finden

im Code Kommentar // HIER bin ich mir nicht sicher, wie man diesen Teil des Codes korrekt umsetzt.

i mein Problem hoffen Sinn macht ...

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

Ist das Hausaufgaben? Weil Sie eine Liste und Sortierung oder LINQ und OrderByDescending und Take (2) verwenden, um die zwei größten Werte zu erhalten. –

+0

Wenn Sie sie bereits sortieren, was ist der Sinn der zweiten Schleife? Je nachdem, ob Sie in aufsteigender oder absteigender Reihenfolge sortieren, können Sie, solange Ihr Array mehr als zwei Datensätze enthält, einfach den zweiten Index des Arrays oder den vorletzten Index des Arrays auswählen. – RizJa

+3

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

Antwort

3

Es ist sehr einfach:

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

Warum der Downvote? Dies ist eine großartige Möglichkeit, dies zu tun. – Grax

+0

Sie sollten wahrscheinlich erwähnen, dass 'using System.Linq;' erforderlich ist – Grax

+1

Wenn es zwei gleiche Nummern gibt und Sie nicht möchten, dass Sie Distinct() verwenden können. In der Frage wird jedoch nicht erläutert, was genau in diesem Fall erforderlich ist. –

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; 

Edit: Formatierung schrecklich ist, aber die Idee ist dass Sie den größten Wert behalten und den einen direkt darunter setzen, indem Sie grundlegende Bedingungen verwenden. Kein Linq benötigt.

+0

Sie vermissen ein 'else if (a [i]> b0) b0 = a [i]; ' – juharr

+0

Danke, Formatierung hat mich etwas durcheinander gebracht – maximdumont

Verwandte Themen