ArrayIndexOutOfBoundsException bei einem Sortierverfahren

Kumora

Neues Mitglied
Hi, ich hänge mit einem Kumpel seit Stunden an einer Aufgabe für den Informatikunterricht. Wir sollen ein zufällig befühltes Array sortieren, und dass nach verschiedenen Sortierverfahren (selection sort/insertion sort/etc.). Ich hab jetzt einen Code der (glaube ich) funktionieren wird, jedoch wird bei einer while-Schleife ein java.lang.ArrayIndexOutOfBoundsException-Fehler.
Der Fehler liegt in Zeile 96. Gerne auch Verbesserungen für den restlichen Code ^^, und bedenkt bitte, ich bin ein Code-Noobie. LG
Java:
/**
 *
 * Beschreibung
 *
 * @version 1.0 vom 06.10.2022
 * @author
 */

public class Sortierverfahren {
 
  public static void main(String[] args) {
    int arrayanzahl = 50;
    long zeit = System.currentTimeMillis(), zeit1;
    int[] original, feld;
    original = new int[arrayanzahl];
    feld = new int[arrayanzahl];
    original = befuelleArray(original);                                 
    feld = kopiereArray(original, feld);
    System.out.println("UNSORTIERTES ZAHLENFELD");
    ausgabeArray(feld);
    zeit1 = System.currentTimeMillis()-zeit;
    zeit = System.currentTimeMillis();
    System.out.println("Benötigte Zeit in ms: " + zeit1);
    System.out.println(" ");
    selectionSort(feld);
    zeit1 = System.currentTimeMillis()-zeit;
    zeit = System.currentTimeMillis();
    System.out.println("Dafür benötigte Zeit in ms: " + zeit1);
    System.out.println(" ");
    insertionSort(feld);
    zeit1 = System.currentTimeMillis()-zeit;
    zeit = System.currentTimeMillis();
    System.out.println("Dafür benötigt Zeit in ms: " + zeit1);
    System.out.println(" ");
  } // end of main
 
  public static int[] befuelleArray(int[] zahlen) {      //hier wird das Array "original" befühlt
    int length = zahlen.length;
    for (int i = 0;i<length ;i++ ) {
      zahlen[i] = (int)(Math.random()*100);     
    } // end of for
    return zahlen;
  } // end of befuelleArray 
 
  public static int[] kopiereArray(int[] gegeben, int[] kopiert) {  //hier wird "feld" definiert
    int length = gegeben.length;
    for (int i = 0;i<length ;i++ ) {
      kopiert[i] = gegeben[i];
    } // end of for
    return kopiert;
  } //end of kopiereArray
 
  public static void ausgabeArray(int[] druck) {  // hier wird "feld" ausgegeben
    for (int i = 0;i<druck.length ;i++ ) {
      System.out.print(druck[i] + " ");
    } // end of for
    System.out.println("");
    System.out.println("");
  } // end of ausgabeArray
 
  public static int[] tauschen(int[] zahlen, int pos1, int pos2) {     //hier wird eine Position mit der anderen getauscht. HÄUFIG GENUTZT !NEU KONTROLLIEREN!
    int speicher;
    speicher = zahlen[pos1];
    zahlen[pos1] = zahlen[pos2];
    zahlen[pos2] = speicher;
    return zahlen;
  } // end of tauschen
 
  public static void selectionSort(int[] zahlen) {
    int links = 0;
    int min = 0;
    while (links<zahlen.length) {
      min = links;
      int i = links;
      while (i < zahlen.length) {
        if (zahlen[i]<=zahlen[min]) {
          min = i;
        } else {
        
        } // end of if-else 
        i++;
      } // end of while
      tauschen(zahlen, min, links);
      links++;
      i = 0;
    } // end of while
    System.out.println("Sortiertes Zahlenfeld nach Selection-Sort-Verfahren:");
    ausgabeArray(zahlen);
  } // end of selectionSort
 
  public static void insertionSort(int[] zahlen) {
    int rechts = 1, links = rechts-1;
    while (rechts<=zahlen.length) {
      int i = 0;
      while (i <= rechts-1) {         
        if (zahlen[rechts]<=zahlen[i]) {   //LAUT JAVA IST HIER DER FEHLER...
          tauschen(zahlen, rechts, i);
        } // end of if
        i++;
      } // end of while
      rechts++;
    } // end of while
    ausgabeArray(zahlen);
  } // end of insertionSort 
} // end of class Sortierverfahren
 
rechts läuft bis zahlen.length und du greifst auf zahlen[rechts] zu.

Der höchste Index ist aber zahlen.length-1.
Vermutlich muss in Zeile 93 also nur ein < stehen. Ich habe mir die Algorithmen aber nicht weiter angesehen.
 
rechts läuft bis zahlen.length und du greifst auf zahlen[rechts] zu.

Der höchste Index ist aber zahlen.length-1.
Vermutlich muss in Zeile 93 also nur ein < stehen. Ich habe mir die Algorithmen aber nicht weiter angesehen.
Du hast komplett recht! Ich war schon an dem Punkt das etwas mit rechts nicht stimmt... aber manchmal braucht es einfach ein frischen Blick. Danke dir!
 

Zurück
Oben