Stackoverflow bei Quicksort

Fishmsta

Mitglied
Hallo Leute.

Es geht um folgenden Code:
Java:
import java.io.*;
import java.util.*;
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * Messdatenerfassung.java
 *
 * Created on 27.09.2011, 10:23:28
 */
/**
 *
 * @author Marvin Fischenich
 */
public class Messdatenerfassung extends javax.swing.JFrame {
    
    ArrayList<String> values = new ArrayList<String>();
    ArrayList<Double> values_d = new ArrayList<Double>();
    private double[] numbers;
    private int number;
    
    /** Creates new form Messdatenerfassung */
    public Messdatenerfassung() {
        initComponents();
    }
    
    public void inArrayKopieren() {
        
        System.out.println("Array ausgeben:");
        
        double[] numbers = new double[values_d.size()];
        for(int i = 0; i < values_d.size(); i++) {
            numbers[i] = values_d.get(i);
            System.out.println(numbers[i]);
        }
        
        sort(numbers);
        
    }
    
    public void sort(double[] values) {
        if(values == null || values.length == 0) {
            return;
        }
        this.numbers = values;
        number = values.length;
        quicksort(0, number - 1);
    }
    
    private void quicksort(int low, int high) {
        int i = low, j = high;
        double pivot = numbers[low + ((high-low)/2)];
        
        while(i <= j) {
            while(numbers[i] < pivot) {
                i++;
            }
            while(numbers[j] > pivot) {
                j--;
            }
            if(i <= j) {
                exchange(i, j);
                i++;
                j++;
            }
        }
        if(low < j) {
            quicksort(low, j);
        }
        if(i < high) {
            quicksort(i, high);
        }
    }
    
    private void exchange(int i, int j) {
        double tmp = numbers[i];
        numbers[i] = numbers[j];
        numbers[j] = tmp;
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jFileChooser1 = new javax.swing.JFileChooser();
        textAnzahlMesswerte = new javax.swing.JLabel();
        textFeldAnzahlMesswerte = new javax.swing.JTextField();
        textMinimum = new javax.swing.JLabel();
        textFeldMinimum = new javax.swing.JTextField();
        textMaximum = new javax.swing.JLabel();
        textFeldMaximum = new javax.swing.JTextField();
        textMittelwert = new javax.swing.JLabel();
        textFeldMittelwert = new javax.swing.JTextField();
        textStandardabweichung = new javax.swing.JLabel();
        textFeldStandardabweichung = new javax.swing.JTextField();
        textMedian = new javax.swing.JLabel();
        textFeldMedian = new javax.swing.JTextField();
        buttonDatenLaden = new javax.swing.JButton();
        buttonSortieren = new javax.swing.JButton();
        tabelle = new javax.swing.JScrollPane();
        jTable = new javax.swing.JTable();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Bobs Discount");
        setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));

        textAnzahlMesswerte.setText("Anzahl Messwerte");

        textFeldAnzahlMesswerte.setEditable(false);
        textFeldAnzahlMesswerte.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                textFeldAnzahlMesswerteActionPerformed(evt);
            }
        });

        textMinimum.setText("Minimum");

        textFeldMinimum.setEditable(false);

        textMaximum.setText("Maximum");

        textFeldMaximum.setEditable(false);

        textMittelwert.setText("Mittelwert");

        textFeldMittelwert.setEditable(false);

        textStandardabweichung.setText("Standardabweichung");

        textFeldStandardabweichung.setEditable(false);

        textMedian.setText("Median");

        textFeldMedian.setEditable(false);

        buttonDatenLaden.setText("Daten laden");
        buttonDatenLaden.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonDatenLadenActionPerformed(evt);
            }
        });

        buttonSortieren.setText("Sortieren");
        buttonSortieren.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                buttonSortierenActionPerformed(evt);
            }
        });

        tabelle.setEnabled(false);

        jTable.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null},
                {null, null, null, null, null}
            },
            new String [] {
                "1", "2", "3", "4", "5"
            }
        ));
        tabelle.setViewportView(jTable);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textAnzahlMesswerte, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(textFeldAnzahlMesswerte, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textMinimum, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(textFeldMinimum, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textMaximum, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(textFeldMaximum, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textMittelwert, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(textFeldMittelwert, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textStandardabweichung, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(textFeldStandardabweichung, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(textMedian, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(textFeldMedian, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(buttonDatenLaden, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(buttonSortieren, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(tabelle, javax.swing.GroupLayout.DEFAULT_SIZE, 398, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(3, 3, 3)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textAnzahlMesswerte, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textFeldAnzahlMesswerte, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textMinimum, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textFeldMinimum, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textMaximum, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textFeldMaximum, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textMittelwert, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textFeldMittelwert, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textStandardabweichung, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textFeldStandardabweichung, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(textMedian, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textFeldMedian, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(buttonDatenLaden, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(buttonSortieren, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(tabelle, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        textAnzahlMesswerte.getAccessibleContext().setAccessibleDescription("");

        pack();
    }// </editor-fold>                        

private void textFeldAnzahlMesswerteActionPerformed(java.awt.event.ActionEvent evt) {                                                        
// TODO add your handling code here:
}                                                       

    private void buttonDatenLadenActionPerformed(java.awt.event.ActionEvent evt) {                                                 
        int option = jFileChooser1.showOpenDialog(this);

        if(option == jFileChooser1.APPROVE_OPTION) {
           BufferedReader reader;
 
        try {
            reader = new BufferedReader(new FileReader(jFileChooser1.getSelectedFile().getAbsolutePath()));
            String zeile;
            while ((zeile = reader.readLine()) != null) {
                values.add(zeile);
            }
        } catch (IOException e) {
            System.err.println("Datei konnte nicht eingelesen werden!");
        }
        
        } else if(option == jFileChooser1.CANCEL_OPTION) {
            
        } else if(option == jFileChooser1.ERROR_OPTION) {
            System.err.println("Datei konnte nicht eingelesen werden!");
        }
        
        for(int i = 0; i < values.size(); i++) {
            values_d.add(Double.parseDouble(values.get(i)));
        }
        
    }                                                

    private void buttonSortierenActionPerformed(java.awt.event.ActionEvent evt) {                                                
        inArrayKopieren();
        System.out.println("Sortiertes Array:");
        for(int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }
    }                                               

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {

        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Messdatenerfassung().setVisible(true);
            }
        });
        
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton buttonDatenLaden;
    private javax.swing.JButton buttonSortieren;
    private javax.swing.JFileChooser jFileChooser1;
    private javax.swing.JTable jTable;
    private javax.swing.JScrollPane tabelle;
    private javax.swing.JLabel textAnzahlMesswerte;
    private javax.swing.JTextField textFeldAnzahlMesswerte;
    private javax.swing.JTextField textFeldMaximum;
    private javax.swing.JTextField textFeldMedian;
    private javax.swing.JTextField textFeldMinimum;
    private javax.swing.JTextField textFeldMittelwert;
    private javax.swing.JTextField textFeldStandardabweichung;
    private javax.swing.JLabel textMaximum;
    private javax.swing.JLabel textMedian;
    private javax.swing.JLabel textMinimum;
    private javax.swing.JLabel textMittelwert;
    private javax.swing.JLabel textStandardabweichung;
    // End of variables declaration                   
}

In Zeile 70 bekomm ich nen StackOverflowError.
Habe leider keine Ahnung warum.
Der erste Aufruf von quicksort scheint ja zu funktionieren (sonst würde ich ja garnicht zu Zeile 70 kommen)

Alles was vorher geschieht, scheint so zu funktionieren, wie es soll.
Die Ausgabe bis zum Fehler:
Code:
Array ausgeben:
3.78
3.88
3.78
3.82
3.75
3.83

Ich hoffe ihr könnt mir helfen.
THX!
 
G

Gast2

Gast
Lass dir doch mal die Aufrufparameter ausgeben. Nen Stackoverflow bekommst du z.b. bei ner Endlosrekursion.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C StackOverflow bei Rekursion Java Basics - Anfänger-Themen 7
K MergeSort Stackoverflow Java Basics - Anfänger-Themen 5
P Compiler-Fehler StackOverFlow Java Basics - Anfänger-Themen 4
C Klassen StackOverflow bei erster Nutzung von Klassen/Konstruktoren Java Basics - Anfänger-Themen 9
M StackOverflow Problem Java Basics - Anfänger-Themen 9
L StackOverFlow, finde Grund nicht! Java Basics - Anfänger-Themen 5
O StackOverflow für Eingabewerte berechnen Java Basics - Anfänger-Themen 3
J Stackoverflow-Abbruchbedingung Java Basics - Anfänger-Themen 7
G StackOverflow Fehler Java Basics - Anfänger-Themen 3
Y stackoverflow fehler Java Basics - Anfänger-Themen 7
G Stackoverflow! Java Basics - Anfänger-Themen 14
S Stackoverflow Error Java Basics - Anfänger-Themen 5
G Parser liefert StackOverflow error Java Basics - Anfänger-Themen 6
C StackOverflow Error, objekte öfters erzeugen Java Basics - Anfänger-Themen 6
M StackOverFlow bei JOptionPane? Java Basics - Anfänger-Themen 23
H Löschen in einem binären Baum führt zu einem StackOverflow Java Basics - Anfänger-Themen 2
P StackOverFlow - SocketTimeoutException Java Basics - Anfänger-Themen 12
frau-u StackOverflow - woher kommt es? Java Basics - Anfänger-Themen 7
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
K Quicksort Fehler in der Implementierung Java Basics - Anfänger-Themen 2
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
M Quicksort implementierung Java Basics - Anfänger-Themen 23
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 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
J Quicksort Implementierung-- Exception ArrayOutOfBounds Java Basics - Anfänger-Themen 6
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

Ähnliche Java Themen

Neue Themen


Oben