SlowSort in Java

bRainLaG

Mitglied
Hallo liebe Community ich brauche leider mal wieder ein zweites gutes Auge. Mein Code schmeißt mir eine ArrayIndexOutOfBoundsException und ich sehe irgendwie den Fehler nicht:

Code:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Sortalgo;

import java.util.Arrays;
import java.util.Random;

/**
 *
 * @author Ich
 */
public class SlowSort {

    private int[] num;
    private int numb;
    private int pivot;

    public void sort(int[] values) {
        if (values == null || values.length == 0) {
            return;
        }

        this.num = values;
        numb = values.length;
        slowsort(values, 0, numb-1);
    }

    private void slowsort(int[] values, int i, int j) {
        if (i >= j) {
            pivot = (i + j) / 2;
            slowsort(values, i, pivot);
            slowsort(values, pivot + 1, j);
        }
        if (values[j] < values[pivot]) {
            swap(values[j], values[pivot]);
            
        }
        slowsort(values, i, j - 1);
        
    }

    private void swap(int i, int j) {
        int temp = num[i];
        num[i] = num[j];
        num[j] = temp;
    }

    public void random(int[] array) {

        for (int k = 0; k < array.length; k++) {
            Random r = new Random();
            int rand = r.nextInt();
            array[k] = rand;

        }
    }

    public static void main(String[] args) {

        int [] values;
        values = new int [10];

        SlowSort slow = new SlowSort();
        slow.random(values);
        slow.sort(values);
        System.out.println(Arrays.toString(values));

    }
}

Code:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -358296385
        at Sortalgo.SlowSort.swap(SlowSort.java:45)
        at Sortalgo.SlowSort.slowsort(SlowSort.java:37)
        at Sortalgo.SlowSort.sort(SlowSort.java:27)
        at Sortalgo.SlowSort.main(SlowSort.java:67)

Ich hoffe mir kann vieleicht jemand nen Tipp geben
 
Wow ... da stimmt aber einiges überhaupt nicht.

1) Wir haben hier auch Java-Tags *siehe Signatur* ... diese erhöhen die Lesbarkeit ... bitte beim nächsten mal dran denken.

2) Gehen wir den Stack doch mal durch
Der Fehler tritt in SlowSort.swap(int, int) auf. *Package-Name schreibt man übrigens lowerCamelCase*
Wenn wir uns im Stack weiter bewegen kommen wir zu SlowSort.slowSort(int[], int, int).
Dort callst du SlowSort.swap(int, int) mit dem INHALT ! des Array-Elementes ... und verwendest das als Array-Index ... das das kracht ist sieht man aber =D.

Ich kenne den Algorythmus jetzt selbst nicht .. aber der Fehler liegt eindeutig in Zeile 37 wo du den Inhalt des Arrays als Index übergibst und damit die Methode swap(int, int) falsch callst.

Auch finde ich die globalen Variablen eher sub-optimal. Es ist jetzt kein Fehler ... aber wenn man schon Arrays welche ja nur als Referenz und nicht als Copy übergeben werden verwendet sollte man damit auch konsequent die gesamte Klasse durch arbeiten und keine Mischformen als Call-by-Reference und Global-Variable machen ... sieht halt auch nicht sonderlich schön aus.
 
Zurück