Quicksort Implementierung-- Exception ArrayOutOfBounds

Status
Nicht offen für weitere Antworten.

JavaNewby

Mitglied
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:

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!
 

Landei

Top Contributor
Und die Exceptions heißen wie...? Sorry, meine Glaskugel ist gerade beschlagen ...


[edit]Kann es sein, dass deine quicksort-Methode noch eine Abbruchbedingung braucht?
if (l + 1 >= r) { return; } oder so?
 
Zuletzt bearbeitet:

JavaNewby

Mitglied
Es ist ArrayIndexOutOfBoundException, hab ich in der ersten Post erwähnt. :)

Quicksort hab ich mit der void-Methode implementiert, daher brauchts keinen return-statement... Denk ich.
 

Landei

Top Contributor
Jede Rekursion braucht eine Abbruchbedingung. Manchmal ergibt sie sich "automatisch", manchmal nicht. Was genau passiert bei dir, wenn r == l+1 oder r == l ist? Keine Ahnung, bin gerade zu faul nachzuschauen. Aber wenn du die if-Anweisung an den Anfang von quicksort stellst, kannst du das zumindest als Fehlerursache ausschalten (ich habe mir angewöhnt, bei solchen Sachen nicht zu "clever" sein zu wollen). Ansonsten streu ein paar System.out.printlns mit nützlichen Infos ein, um zu sehen, wo es hakt.
 

vogella

Bekanntes Mitglied
Hallo JavaNewby,

eine funktionierende Quicksort Implementierung findest Du hier: Quicksort in Java

Der Article beinhaltet auch einen JUnit Test mit Zufallszahlen; den Teil kannst Du dann relativ leicht durch Deine Scanner Klasse ersetzen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
M Quicksort implementierung Java Basics - Anfänger-Themen 23
I Java Quicksort PAP Java Basics - Anfänger-Themen 2
B Quicksort in Verbindung mit einem Projekt Java Basics - Anfänger-Themen 1
M QuickSort und Liste Java Basics - Anfänger-Themen 6
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
Hanschyo Quicksort sortiert von groß nach klein Java Basics - Anfänger-Themen 3
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
L Quicksort verstehen Java Basics - Anfänger-Themen 3
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 5
M Quicksort Laufzeit langsam Java Basics - Anfänger-Themen 0
J Quicksort mit Stack Java Basics - Anfänger-Themen 4
Liondary Quicksort Java Basics - Anfänger-Themen 20
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
D Java Quicksort Java Basics - Anfänger-Themen 5
A Frage zu QuickSort Java Basics - Anfänger-Themen 9
B Quicksort mit Durchschnitt als Pivot Java Basics - Anfänger-Themen 1
K Quicksort Java Basics - Anfänger-Themen 3
M Quicksort - Probleme Java Basics - Anfänger-Themen 5
T QuickSort implementieren Java Basics - Anfänger-Themen 5
R QuickSort Verständis Problem (?) Java Basics - Anfänger-Themen 2
E Quicksort Java Basics - Anfänger-Themen 8
Xendarii Quicksort gibt kein Ergebnis aus Java Basics - Anfänger-Themen 13
E QuickSort: Ergebniss speichern Java Basics - Anfänger-Themen 2
P quickSort eines Objekt-Arrays geht nicht! Java Basics - Anfänger-Themen 11
F Stackoverflow bei Quicksort Java Basics - Anfänger-Themen 2
F Quicksort Java Basics - Anfänger-Themen 22
C Quicksort Invariante Java Basics - Anfänger-Themen 2
C QuickSort - Pivot in der Mitte Java Basics - Anfänger-Themen 5
P QuickSort iterativ Java Basics - Anfänger-Themen 5
K Eine Frage zum Quicksort Java Basics - Anfänger-Themen 11
B Quicksort --> Methodenaufruf Java Basics - Anfänger-Themen 10
B QuickSort - Fehler nicht zu finden Java Basics - Anfänger-Themen 2
W Quicksort Problem Java Basics - Anfänger-Themen 3
A Quicksort, #Vergleiche zählen klappt nicht Java Basics - Anfänger-Themen 3
M Fehler in meinem Quicksort! Java Basics - Anfänger-Themen 21
B Quicksort Struktogramm Java Basics - Anfänger-Themen 9
G Frage zu Quicksort Java Basics - Anfänger-Themen 18
0 Quicksort bsp Java Basics - Anfänger-Themen 5
B Quicksort Problem Java Basics - Anfänger-Themen 6
S Mein Quicksort Problem: he method quickSort(int[], int, int) Java Basics - Anfänger-Themen 2
M Quicksort Java Basics - Anfänger-Themen 2
C Quicksort raten Java Basics - Anfänger-Themen 2
K ArrayList sortieren mit Quicksort Java Basics - Anfänger-Themen 3
M Quicksort Java Basics - Anfänger-Themen 4
J Quicksort programmieren Probleme Java Basics - Anfänger-Themen 9
S Quicksort Programm Java Basics - Anfänger-Themen 7
D Quicksort Java Basics - Anfänger-Themen 3
K Parameterübergabe bei quickSort Java Basics - Anfänger-Themen 6
S QuickSort will mir nicht in den Kopf (an einer Stelle) Java Basics - Anfänger-Themen 14
0 Quicksort Java Basics - Anfänger-Themen 2
M QuickSort Java Basics - Anfänger-Themen 4
J QuickSort - kurze Frage Java Basics - Anfänger-Themen 9
H Quicksort und Rekursiv: Türme von Hanoi Java Basics - Anfänger-Themen 9
ruutaiokwu JRE-/JDK-unabhängige PBKDF2WithHmacSHA512-Implementierung Java Basics - Anfänger-Themen 16
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
J Implementierung gcd();square() Java Basics - Anfänger-Themen 98
J Implementierung von Observer und Singleton-Pattern Java Basics - Anfänger-Themen 9
A Implementierung von String toString methode() Java Basics - Anfänger-Themen 4
G Projekt architektur (implementierung) Java Basics - Anfänger-Themen 3
M Implementierung einer getNextId Methode Java Basics - Anfänger-Themen 5
J Implementierung Listen-ADT Java Basics - Anfänger-Themen 131
J Implementierung eines Zustandsdiagramms Java Basics - Anfänger-Themen 19
I GenericQueue / Implementierung als Ringspeicher Java Basics - Anfänger-Themen 4
MiMa Log4j2 implementierung Java Basics - Anfänger-Themen 4
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
G Array implementierung Java Basics - Anfänger-Themen 23
J ANTLR Installierung und Implementierung Java Basics - Anfänger-Themen 2
E Hilfe bei Implementierung von Methoden Java Basics - Anfänger-Themen 10
S SkipList Implementierung Java Basics - Anfänger-Themen 1
J Methoden Suche effiziente Implementierung für eine Methode Java Basics - Anfänger-Themen 3
J Interface Probleme bei der Implementierung Java Basics - Anfänger-Themen 1
E hashCode implementierung Java Basics - Anfänger-Themen 9
S Implementierung der Klasse Konto und Nutzung bereits vorhandener Klassen Java Basics - Anfänger-Themen 7
H Implementierung eines Interfaces erweitern Java Basics - Anfänger-Themen 13
O Generics - Implementierung Java Basics - Anfänger-Themen 7
A Hilfestellung zur Implementierung des Gaußsches Eliminationsverfahren Java Basics - Anfänger-Themen 4
B OOP Implementierung eines Heaps Java Basics - Anfänger-Themen 13
K Bucketsort Implementierung Java Basics - Anfänger-Themen 0
K Mergesort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
S Klassen Klassendiagramm Implementierung? Java Basics - Anfänger-Themen 5
J Bucketsort Implementierung Java Basics - Anfänger-Themen 0
C Stack - listenbasierte Implementierung Java Basics - Anfänger-Themen 4
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
T Collections LinkedList<LinkedList<T>> - Implementierung Java Basics - Anfänger-Themen 10
F Implementierung von Interfaces -> Problem mit main Java Basics - Anfänger-Themen 12
D Resourcebundle implementierung Java Basics - Anfänger-Themen 2
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
Q Implementierung von Listenern Java Basics - Anfänger-Themen 4
B Klassen Hilfe bei Implementierung Java Basics - Anfänger-Themen 5
N Compiler-Fehler Comparable / compareTo implementierung Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Binärbaums Java Basics - Anfänger-Themen 3
I Erste Schritte Implementierung der API Java Basics - Anfänger-Themen 2
S Fragen zur Implementierung eines Adressbuches Java Basics - Anfänger-Themen 20
M falsche implementierung von currentTimeMillis() ? Java Basics - Anfänger-Themen 14
G Implementierung eines Kontos Java Basics - Anfänger-Themen 11
SexyPenny90 Implementierung einer doubly linked list Java Basics - Anfänger-Themen 5
N Binärbaum/Implementierung Java Basics - Anfänger-Themen 9

Ähnliche Java Themen

Neue Themen


Oben