tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
330
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    bRainLaG bRainLaG ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    90
    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 :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    
    /*
     * 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 :
    1
    2
    3
    4
    5
    
    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
     

  2. #2
    SE Tutorials.de Gastzugang
    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.
     

  3. #3
    bRainLaG bRainLaG ist offline Mitglied Silber
    Registriert seit
    Nov 2009
    Beiträge
    90
    Vielen Dank, ich werde da nochmal schauen und die Tipps begutachten
     

Ähnliche Themen

  1. Antworten: 12
    Letzter Beitrag: 24.09.08, 13:16
  2. Antworten: 0
    Letzter Beitrag: 01.05.08, 13:38
  3. Antworten: 1
    Letzter Beitrag: 17.02.07, 18:39
  4. COM4J eine alternative Java - COM Bridge mit Java 5 Mitteln
    Von Thomas Darimont im Forum Java Technology News
    Antworten: 0
    Letzter Beitrag: 10.10.06, 17:49
  5. Java is Hot! Java News - Java Polis 2005
    Von Thomas Darimont im Forum Java
    Antworten: 0
    Letzter Beitrag: 03.12.05, 16:23