Hallo zusammen,
Gerade probiere ich, den berühmten Quicksort-Algorithmus selber zu implementieren. Dazu erzeuge ich ein Array aus zufällig generierten Zahlen, und der Benutzer darf entscheiden, wie gross das Array sein darf. Jedoch kriege ich eine Exception ArrayIndexOutOfBounds, und absolut keine Ahnung wieso!
Mein Code sieht folgendermassen aus:
So sieht Output/Fehlermeldung aus:
Könnt ihr mir bitte ein Paar Tipps oder Gedankenanstösse geben, wo der Fehler liegen kann? Ich benutze Windows Vista; die Entwicklungsumgebung ist Eclipse.
Vielen Dank im Voraus!
Gerade probiere ich, den berühmten Quicksort-Algorithmus selber zu implementieren. Dazu erzeuge ich ein Array aus zufällig generierten Zahlen, und der Benutzer darf entscheiden, wie gross das Array sein darf. Jedoch kriege ich eine Exception ArrayIndexOutOfBounds, und absolut keine Ahnung wieso!
Mein Code sieht folgendermassen aus:
Java:
public class Quicksort {
//Initialise global variables:
static int n;
static int[] array ;
public static void main(String[] args){
Quicksort to_sort = new Quicksort();
array = to_sort.CreateArray();
quicksort(array, 0, array.length - 1);
}
//create an array of random numbers depending on user input:
public int[] CreateArray(){
//size of array must be between 2 and 20:
try{
//prompting for input:
System.out.println("Please input any number between 2 and 20: ");
Scanner scanner = new Scanner(System.in);
n = scanner.nextInt();
if(n < 2 || n>20) throw new MyException();
}catch(MyException e){
System.out.println("You were expected to input a number between 2 and 20!");
}
//generate a random-numbers array
Random rd = new Random();
array = new int[n];
//print it:
for(int i = 0; i< array.length; i++){
array[i] = rd.nextInt(30);
System.out.println(array[i]);
}
return array;
}
//the actual sorting algorithm
public static void quicksort(int[] a, int l, int r){
//Initialise indexes
int i = l;
int j = r;
int pivot = a[r];
int temp;
do{
//traverse the array from left and right simultaneously:
do{ i++; }while(i<pivot);
do{ j--; }while(j>pivot);
if(i<j){
//swap elements at positions i and j
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
else break;
}while(i < j);
//swap i-th element with the pivot:
temp = a[i];
a[i] = a[r];
a[r] = temp;
//recursive call:
quicksort(a, l, i-1);
quicksort(a, i+1, r);
}
}
class MyException extends Exception{}
So sieht Output/Fehlermeldung aus:
Java:
Please input any number between 2 and 20: 5
5
20
0
11
2
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20
at Quicksort.quicksort(Quicksort.java:75)
at Quicksort.quicksort(Quicksort.java:80)
at Quicksort.main(Quicksort.java:15)
Könnt ihr mir bitte ein Paar Tipps oder Gedankenanstösse geben, wo der Fehler liegen kann? Ich benutze Windows Vista; die Entwicklungsumgebung ist Eclipse.
Vielen Dank im Voraus!