Methoden Quicksort Verständnisproblem / Compiler-Fehler

ElfterDoktor

Mitglied
Hallo,
wir sollten das Quicksort Verfahren von einen Blatt erarbeiten. Auf der Rückseite war der Code als Strukturgramm angegeben.
Aufgabe Implementieren und den Array vorher nachher ausgeben.
Erstmal wusste ich garnicht was ich bei links und rechts angeben sollte, daher mal gegoogelt und mal 0 und feld.length-1 angegeben.
Aber der Algorithmus selbst macht doch Probleme.
Fehler:
Java:
java.lang.ArrayIndexOutOfBoundsException: -1
	at SortierverfahrenQ1.quicksort(SortierverfahrenQ1.java:26)
	at SortierverfahrenQ1.showArray(SortierverfahrenQ1.java:50)
Aber ich weiss jetzt nicht wie dieser Fehler überhaupt entsteht.

Der Klassencode:
Java:
import java.lang.Math;
/**
 * Write a description of class SortierverfahrenQ1 here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class SortierverfahrenQ1
{
    int[] feld = new int[500];
    /**
     * Constructor for objects of class SortierverfahrenQ1
     */
    public SortierverfahrenQ1()
    {
    }
    public void quicksort(int links, int rechts) {
     
        if(rechts > links) {
           int p = feld[rechts];
           int i = links-1;
           int j = rechts;
           int temp = 0;
           while( j > i )
           {
             while ( feld[i] < p)
             {
                 i = i+1;
             }
             while ( feld[j] > p && j != 0)
             {
                 j = j-1;
             }
             temp = feld[i];
             feld[i] = feld[j];
             feld[j] = temp;
           }
           feld[j] = feld[i];
           feld[i] = feld[rechts];
           feld[rechts] = temp;
           quicksort(links, i-1);
           quicksort(i+1, rechts);
        }
    }
    public void showArray() {
       for (int x=0; x<feld.length; x++) {
        System.out.print(feld[x] +" ");
       } 
       System.out.println();
        quicksort(0, feld.length-1);
        for (int x=0; x<feld.length; x++) {
        System.out.print(feld[x] +" ");
       } 
    }
   public void initZufaellig()
   {
       double cachedouble = 0;
       int cache = 0;
       for(int x = 0; x < feld.length; x++)
       {
         cachedouble = Math.random();
         cachedouble = cachedouble * 50000;
         cache = (int)cachedouble;
         feld[x] = cache;
       }
    } 

}
Und ich habe keinen Abschreibfehler gemacht.... DAs habe ich schon kontrolliert
 
M

Marcinek

Gast
Hallo,

ein Array, hat kein -1 Stelle. Das ist kein Compilerfehler, sondern ein Runtime error.

Debugge dein Programm an der angegebenen Stelle um herauszufinden, warum auf das -1 Element zugegriffen wird.

Gruß.

Martin
 

Final_Striker

Top Contributor
Der Fehler entsteht, wenn du versuchst auf ein Arrayindex zuzugreifen der nicht existiert. In deinem Fall greifst du in der Methode quicksort Zeile 26 auf den Index -1 zu.
 
H

hüteüberhüte

Gast
Warum
Code:
int i = links-1;
? i könnte -1 sein. Diesen Index gibt es nicht. Warum
Code:
while ( feld[i] < p)
             {
                 i = i+1;
             }
? i könnte größer sein als das Feld.
 

ElfterDoktor

Mitglied
Das Problem lag doch am Strukturgramm...
Heute hat sich herausgestellt, dass es sich um eine DoWhile schleife handelte und somit jetzt alles funktioniert.
Trotzdem danke.
 

Neue Themen


Oben