2016-11-04 3 views
-2

Der Titel könnte nicht beschreibend sein, aber bleib bei mir. Diese ist wie Buble Sortierung sollte wie folgt aussehen:Wie zum Bubblesort? | C#

string s = Console.ReadLine(); 
StringBuilder sb = new StringBuilder(s); 
     for (int i = 0; i < sb.Length; i++) 
     { 
      for (int j = 0; j < sb.Length - 1; j++) 
      { 
       if (sb[j] > sb[j + 1]) 
       { 
        char tmp = sb[j]; 
        sb[j] = sb[j + 1]; 
        sb[j + 1] = tmp; 
       } 
      } 
     } 
     s = sb.ToString(); 
     Console.WriteLine(s); 

Jedoch habe ich es versehentlich, wie dies schrieb, und ich weiß nicht, warum ist diese Arbeits sollte ich nicht zumindest eine indexOutOfRange Ausnahme bekommen? ->

Um dies zu verdeutlichen, werden die Buchstaben eines Wortes alphabetisch geordnet

+1

Ihre Indizes sind in der zweiten Version immer in Reichweite. Sie verwenden nur 'i' und' j', und beide sind immer kleiner als 'Length', was für den String und seine Kopie im' StringBuilder' gleich ist. Warum sollten Sie eine Ausnahme erwarten? –

+2

Die meisten oder alle Argumente der 'Fragen, die Debugging-Hilfe suchen (" Warum funktioniert dieser Code nicht? ")' Sind für diese Frage "Warum funktioniert dieser Code?" Gültig. Also, ich stimme zu schließen. Übrigens ist dies wahrscheinlich die erste Frage, "warum funktioniert dieser Code", der mir hier auf SO begegnet :) – fvu

Antwort

0

In Ihrer ersten Annäherung gingen Sie mit j von 0 zu Length - 1 und fügte hinzu, 1 beim Vergleichen der Zeichen.

In Ihrem zweiten Ansatz gingen Sie mit j von 0 zu Length, aber nicht 1 beim Vergleichen von Zeichen hinzugefügt.

Sehen Sie diese beiden Möglichkeiten funktionieren die gleichen und Sie erhalten keine Ausnahme.