2016-06-05 11 views
-2

Kürzlich wurde ich gebeten, einen Array-Sortierer zu machen. Allerdings gibt es dafür bereits eine eingebaute Funktion. Aber ich brauche sie nicht. Ich würde gerne wissen, warum das folgende Skript nicht fortgesetzt wird, wenn es diesen Kommentar übergibt Linie??Warum werden meine Loops nicht ausgeführt?

int n; 
    int t = 0; 
    Console.Write("How many elements do you want to add? "); 
    int length = Convert.ToInt32(Console.ReadLine()); 
    int[] List = new int[length]; 
    while (t < length) 
    { 
     Console.Write("Enter {0} element value: ", t); 
     n = Convert.ToInt32(Console.ReadLine()); 
     List[t] = n; 
     ++t; 
    } 

    /////V The Below code is skipped for some reason V\\\\\ 

    int temp; 
    int min = List[1]; 
    int min_i = 1; 
    if (length < 2) { Console.WriteLine("Sorry, You can't sort a short list!"); } 
    else 
    { 
     for (int y = 1; y > length;) 
     { 
      for (int x = min_i - 1; x < 0; x--) 
      { 
       if (List[min_i] < List[x]) 
       { 
        temp = min; 
        List[min_i] = List[x]; 
        List[x] = temp; 
       } 
       else break; 
      } 
      y++; 
      min = List[y]; 
      min_i = y; 
     } 

    } 
    for(int z = 0; z > length; z++) 
    { 
     Console.Write(List[z] + " "); 
    }    
+0

'>' anstelle von '<' in letzter 'for' Schleife, unter anderem. – Rotem

+0

Wenn der Code unterhalb des Kommentars übersprungen wird, erhalten Sie wahrscheinlich eine Ausnahme im Code über den Kommentaren. Geben Sie alle Ganzzahlen als Eingaben ein? – jdweng

+0

ja hier ist was ich eingabe: http://prntscr.com/bcmpzd –

Antwort

0

Die für for Schleife definierte Bedingung ist immer false.

for (int x = min_i - 1; x < 0; x--) // x is zero and condition is false. 

Ich denke, müssen Sie über die Linie

ändern
for (int x = min_i - 1; x > 0; x--) 

ähnlichen Fall mit der Top-Level-Schleife als auch, Sie könnten für y<length

+0

Es hat nicht funktioniert, wenn ich es zu y

+0

Haben Sie beide Loops wie in Antwort beschrieben modifiziert? –

+0

ja beide geändert, manchmal Abstürze manchmal springt. –

1

ignoriert den Rest suchen müssen (und Hinzufügen zu was andere kommentiert haben) - Diese Schleife wird immer falsch sein:

+0

Warum falsch? dies ist bereits eine if-Anweisung über dieser Schleife, die prüft, ob die Länge> 2 –

+0

@GhadeerAlali, weil y immer

0

Erhöhen Sie den y-Wert, um kleiner als ein oberer Bereichswert zu sein.

for (int y = 1; y < length; y++) 

Verringern Sie den x-Wert so, dass er größer als ein niedrigerer Bereichswert ist.

for (int x = min_i - 1; x > -some value ; x--) 

Erhöhen Sie den z-Wert so, dass er kleiner als der obere Wert ist.

for(int z = 0; z < length; z++) 

In Antwort auf Ihre Kommentare, versuchen, etwas wie folgt aus:

int n; 
int t = 0; 
Console.Write("How many elements do you want to add? "); 
int length = Convert.ToInt32(Console.ReadLine()); 
int[] List = new int[length]; 
while (t < length) 
{ 
    Console.Write("Enter {0} element value: ", t); 
    n = Convert.ToInt32(Console.ReadLine()); 
    List[t] = n; 
    ++t; 
} 

/////V The Below code is skipped for some reason V\\\\\ 

int temp; 
int min = List[1]; 
int min_i = 1; 
if (length < 2) { Console.WriteLine("Sorry, You can't sort a short list!"); } 
else 
{ 
    for (int y = length - 1; y > 0; y--) 
    { 
     for (int x = 0; x < y; x++) 
     { 
      if (List[x] > List[x + 1]) 
      { 
       temp = List[x]; 
       min = List[x + 1] 
       List[x] = min; 
       List[x + 1] = temp; 
      } 
     } 
    } 
} 
+0

1. Y-Wert ist bereits innerhalb der Schleife erhöht, die Sie nach dieser verschachtelten Schleife finden können, 2. & 3. hat nicht funktioniert. –

+0

@GhadeerAlali Es gibt keine Notwendigkeit, den y-Wert innerhalb der Schleife zu erhöhen, das ist der ganze Punkt der for-Schleife. Was die anderen beiden betrifft, bin ich nicht überrascht, dass sie nicht funktionieren, da es Probleme mit Ihrem Code gibt, die über die Formatierung Ihrer Loops hinausgehen, da die Bereiche nicht wissen, für welchen Bereich Sie eine Schleife erstellen müssen. aber ich weiß, wenn Sie inkrementieren oder dekrementieren, müssen Sie Ihre Loops in der von mir vorgeschlagenen Weise formatieren. Jetzt müssen Sie herausfinden, welche oberen und unteren Werte für die zweiten beiden Loops zu verwenden sind. –

+0

Ich möchte, dass der Code wie folgt aussieht: Er beginnt beim zweiten Element im Array und überprüft rückwärts, ob das Element davor größer ist, also ersetzt er sie, und so weiter ... bis ein Element erreicht wird, das niedriger ist als das Element, das wir haben bewegen sich rückwärts damit. & dann geht es für den dritten Punkt in der Schleife & und macht die gleichen obigen Schritte, und so weiter bis zum letzten Element im Array. –

0
int n; 
     int t = 0; 
     Console.Write("How many elements do you want to add? "); 
     int length = Convert.ToInt32(Console.ReadLine()); 
     int[] List = new int[length]; 
     while (t < length) 
     { 
      Console.Write("Enter {0} element value: ", t); 
      n = Convert.ToInt32(Console.ReadLine()); 
      List[t] = n; 
      ++t; 
     } 

     /////V The Below code is skipped for some reason V\\\\\ 

     int temp; 
     int min = List[1]; 
     int min_i = 1; 
     if (length < 2) { Console.WriteLine("Sorry, You can't sort a short list!"); } 
     else 
     { 
      for (int y = 1; y <= length - 1; y++) //see #1 and #2 
      { 
       for (int x = min_i - 1; x >= 0; x--) //for loop was backwards see #2 
       { 
        if (List[min_i] < List[x]) 
        { 
         temp = min; 
         List[min_i] = List[x]; 
         List[x] = temp; 
        } 
        else break; 
       } 
       //remove y++; and added to for loop 
       min = List[y]; 
       min_i = y - 1; 
      } 

     } 
     for (int z = 0; z <= length - 1; z++) //see #1 and #2 
     { 
      Console.Write(List[z] + " "); 
     } 
     Console.Read(); //added to prevent the program from closing until you press enter or manually close it 

in Ordnung, so Sie Code Sortierung funktioniert nicht. das braucht noch einige Problemlösungen. so weit wie Ihr Code geht ....

1) so Arrays beginnen bei 0 statt 1. Ihre Länge nicht. Der Code brach aufgrund der Länge von 4, aber das Array ging nur auf 3 ([0], [1], [2], [3]), also durch Hinzufügen der "Länge - 1" ändern Sie nicht die Länge, aber Sie können immer noch auf die gleiche Nummer wie das Array verweisen, und es geht nicht außerhalb des Arrays.

2) Sie hatten so ziemlich alle Ihre Anweisungen rückwärts. Lass mich sehen, ob ich dir helfen kann, dich ein bisschen besser daran zu erinnern.

für (int a = 0;

dieser Teil initialisiert nur den Wert

ein < = 10;.

Betrachten Sie das als eine while-Anweisung Während (a < = 10) { halten Sie die for-Schleife laufen}

a ++)

und natürlich der Zuwachs.

Wenn Sie möchten, kann ich Ihnen mit dem Sortieralgorithmus helfen, da ich ein ähnliches Projekt hatte, als ich in der Schule war, denn im Moment funktioniert es nicht so, wie es sollte. Prost!

Verwandte Themen