# Straight Selection Programmierung unverständlich



## derzohan (10. Jun 2011)

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:

```
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

```
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 (10. Jun 2011)

[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 (10. Jun 2011)

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

Vielen Dank ;-)


----------

