Straight Selection Programmierung unverständlich

derzohan

Mitglied
Hallo,
unsere Aufgabe in der Heutigen Informatikstunde bestand darin, ein Programm zu schreiben, was ein mit Zufallszaheln gefülltes Array erzeugt. Dazu sollten wir dann die drei Sortieralgorithmen BubbleSort, StraightSelection und StraightInsertion anwenden.
Nachdem ich BubbleSort ohne weitere Probleme programmiert habe, biss ich mir die Zähne an StraightSelection förmlich die Zähne aus. Hier der Quelltext nachdem mein Lehrer ihn Korriegiert hat:
Java:
    public void sortieren(){
      int max=0;
      int maxIndex=0;
      
      for(int i=0;i<this.anzahl;i++){
        for(int j=0;j<this.anzahl-i;j++){
          if(array[j]>max){
            max=array[j];
            maxIndex=j;
          }
        }
        
        int letzteStelle=this.anzahl-1-i;
        
        int help=array[letzteStelle];
        array[letzteStelle]=array[maxIndex];
        array[maxIndex]=help;
        
        max=0;
        maxIndex=0;
      }
    }

Warum muss der Kopf der zweiten for-Schleife in Zeile sechs nicht so
Java:
for(int j=0;j<this.anzahl-i-1;j++)
aussehen, sondern wie oben??

Meines erachtens nach müsste in der oberen Variante bei dem letzten Durchlauf der for-Schleife eine "java.lang.ArrayIndexOutOfBoundsException: 5" kommen, weil dann i=array.length ist, aber der letzte wert ja nur array.length-1 sein kann.

Ich hoffe ihr versteht mein Problem und könnt helfen
 

faetzminator

Gesperrter Benutzer
[c]i[/c] ist niemals [c]== array.length[/c]. Beide Variablen "schwanken" immer zwischen [c]0[/c] und [c]array.length - 1[/c], da die Schleife abgebrochen wird, sobald [c]i[/c] nicht mehr [c]< array.length[/c] ist.
 

derzohan

Mitglied
Danke!
Nach meinem Gedankengang hätte ich immer <= anstatt < schreiben müssen, was dann ja auch zum Fehler geführt hätte.

Vielen Dank ;-)
 

Neue Themen


Oben