Wie kommst Du denn auf die Koordinaten? (erscheinen mir eher willkürlich und unsinnig :))
Java treibt mich in den Wahnsinn...
-
-
Hallo !
Ich habe malwieder mit Java zu tun...
Kann mir jemand sagen, welche Array-Grenzen ich in diesem Programm überschreite ? Ich finde den Fehler irgendwie nicht, selbst mit Debugger...Vielen Dank schonmal,
Christian
PHP
Alles anzeigenimport java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.Random; public class SwingFrame extends JFrame implements ActionListener{ JPanel untenrechtsmuffen = new JPanel(); JPanel untenlinksmuffen = new JPanel(); JPanel window = new JPanel(); // das Fenster JPanel oberes = new JPanel(); JPanel unteres = new JPanel(); int zahlen[]; //oben links JTextField zahlenoben = new JTextField(50); //oben rechts JTextField auswahlrechts = new JTextField(3); //unten links JButton generierenbutton = new JButton("generieren"); JButton sortierenbutton = new JButton("sortieren"); JButton loeschenbutton = new JButton("loeschen"); //unten rechts JLabel leertext = new JLabel(""); JLabel vergleichetext = new JLabel("Vergleiche"); JLabel vertauschetext = new JLabel("Vertauschungen"); JLabel sortierverfahren1text = new JLabel("Sortierverfahren1"); JLabel sortierverfahren2text = new JLabel("Sortierverfahren2"); JLabel sortierverfahren3text = new JLabel("Sortierverfahren3"); JLabel sortierverfahren4text = new JLabel("Sortierverfahren4"); JTextField a11 = new JTextField(20); JTextField a12 = new JTextField(20); JTextField a21 = new JTextField(20); JTextField a22 = new JTextField(20); JTextField a31 = new JTextField(20); JTextField a32 = new JTextField(20); JTextField a41 = new JTextField(20); JTextField a42 = new JTextField(20); public SwingFrame(){ super("Sortierungs-GUI"); setSize((int)Math.round(700/16)*16,(int)Math.round(200/16)*16); setDefaultCloseOperation(SwingFrame.EXIT_ON_CLOSE); GridLayout Grid2 = new GridLayout(5,3); //unten rechts muffen GridLayout Grid3 = new GridLayout(1,3); // unten links muffen GridLayout windowlayout = new GridLayout(2,1); FlowLayout obenflow = new FlowLayout(); GridLayout untereslayout = new GridLayout(1,2); untenrechtsmuffen.setLayout(Grid2); untenlinksmuffen.setLayout(Grid3); window.setLayout(windowlayout); oberes.setLayout(obenflow); unteres.setLayout(untereslayout); //unten links untenlinksmuffen.add(generierenbutton); untenlinksmuffen.add(sortierenbutton); untenlinksmuffen.add(loeschenbutton); //unten rechts untenrechtsmuffen.add(leertext); untenrechtsmuffen.add(vergleichetext); untenrechtsmuffen.add(vertauschetext); untenrechtsmuffen.add(sortierverfahren1text); untenrechtsmuffen.add(a11); untenrechtsmuffen.add(a12); untenrechtsmuffen.add(sortierverfahren2text); untenrechtsmuffen.add(a21); untenrechtsmuffen.add(a22); untenrechtsmuffen.add(sortierverfahren3text); untenrechtsmuffen.add(a31); untenrechtsmuffen.add(a32); untenrechtsmuffen.add(sortierverfahren4text); untenrechtsmuffen.add(a41); untenrechtsmuffen.add(a42); //allet oberes.add(zahlenoben); oberes.add(auswahlrechts); unteres.add(untenlinksmuffen); unteres.add(untenrechtsmuffen); window.add(oberes); window.add(unteres); setContentPane(window); //actionmuffen zahlenoben.addActionListener(this); auswahlrechts.addActionListener(this); generierenbutton.addActionListener(this); loeschenbutton.addActionListener(this); sortierenbutton.addActionListener(this); auswahlrechts.setText("0"); } public void arrayswap(int array[],int a, int b){ int ablage = array[a]; array[a] = array[b]; array[b] = ablage; } public void actionPerformed(ActionEvent e){ if(e.getActionCommand() == "generieren"){ int i; zahlen = new int [Integer.valueOf((auswahlrechts.getText()).trim()).intValue()]; i = zahlen.length - 1; Random rand = new Random(); while(i > -1){ zahlen[i] = rand.nextInt(100); i = i - 1; } i = zahlen.length-1; zahlenoben.setText(""); while(i > -1){ zahlenoben.setText(zahlenoben.getText() + zahlen[i] + " "); i = i - 1; } } if(e.getActionCommand() == "loeschen"){ zahlenoben.setText(""); } if(e.getActionCommand() == "sortieren"){ int tmp0 = 0; int bubbleswaps = 0; int bubblevgl = 0; int laenge = zahlen.length; while(tmp0 < laenge){ if(zahlen[tmp0] > zahlen[tmp0+1]){ arrayswap(zahlen,tmp0,tmp0+1); bubbleswaps = bubbleswaps + 1; if(tmp0 != laenge){ tmp0 = tmp0 + 1; } } else{ bubblevgl++; if(tmp0 != laenge){ tmp0 = tmp0 + 1; } if(laenge > 0){ laenge = laenge - 1; } } } System.out.println(bubbleswaps + " " + bubblevgl); } }}
-
Boah, von Kommentaren hältst du auch nix, oder?
Entwickelst du mit Eclipse? Falls ja, kannst du mal das komplette Projekt packen und hier hochladen? Oder einfach alle Klassen.
Ansonsten ist die Antwort auf deine Frage: "Die Grenzen des Arrays zahlen[]".
-
Hallo !
Ich arbeite mit BlueJ...
Da sind doch Kommentare Nein, im Ernst, wenn dort noch etwas unklar ist, sag' bescheid, immerhin bin ich es, der die Hilfe braucht.
-
Also bei gibt's keine IndexOutOfBounds.
Mit welchen Eingabewerten kracht's denn?
-
Bei mir kracht es bei jedem Sortiervorgang. Immo hab ich ja nur BubbleSort geschrieben.
Geb mal oben rechts ne Anzahl ein, drück auf generieren und versuche dann mal Sortieren zu drücken. -
Geht doch.
- rechts oben die 12 eingegeben
- generieren geklickt
- sortieren geklickt -
die array-grenzen werden bei beiden vorkommen von "tmp0+1" ueberschritten.
aber ich denke nicht dass das sortieren so funktionieren wird. -
Hmm...
kannst du mir einen Hinweis geben, wo der Fehler liegt ?
Code sieht jetzt so aus bei mir :PHP
Alles anzeigenimport java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.Random; public class SwingFrame extends JFrame implements ActionListener{ JPanel untenrechtsmuffen = new JPanel(); JPanel untenlinksmuffen = new JPanel(); JPanel window = new JPanel(); // das Fenster JPanel oberes = new JPanel(); JPanel unteres = new JPanel(); int zahlen[]; //oben links JTextField zahlenoben = new JTextField(50); //oben rechts JTextField auswahlrechts = new JTextField(3); //unten links JButton generierenbutton = new JButton("generieren"); JButton sortierenbutton = new JButton("sortieren"); JButton loeschenbutton = new JButton("loeschen"); //unten rechts JLabel leertext = new JLabel(""); JLabel vergleichetext = new JLabel("Vergleiche"); JLabel vertauschetext = new JLabel("Vertauschungen"); JLabel sortierverfahren1text = new JLabel("Sortierverfahren1"); JLabel sortierverfahren2text = new JLabel("Sortierverfahren2"); JLabel sortierverfahren3text = new JLabel("Sortierverfahren3"); JLabel sortierverfahren4text = new JLabel("Sortierverfahren4"); JTextField a11 = new JTextField(20); JTextField a12 = new JTextField(20); JTextField a21 = new JTextField(20); JTextField a22 = new JTextField(20); JTextField a31 = new JTextField(20); JTextField a32 = new JTextField(20); JTextField a41 = new JTextField(20); JTextField a42 = new JTextField(20); public SwingFrame(){ super("Sortierungs-GUI"); setSize((int)Math.round(700/16)*16,(int)Math.round(200/16)*16); setDefaultCloseOperation(SwingFrame.EXIT_ON_CLOSE); GridLayout Grid2 = new GridLayout(5,3); //unten rechts muffen GridLayout Grid3 = new GridLayout(1,3); // unten links muffen GridLayout windowlayout = new GridLayout(2,1); FlowLayout obenflow = new FlowLayout(); GridLayout untereslayout = new GridLayout(1,2); untenrechtsmuffen.setLayout(Grid2); untenlinksmuffen.setLayout(Grid3); window.setLayout(windowlayout); oberes.setLayout(obenflow); unteres.setLayout(untereslayout); //unten links untenlinksmuffen.add(generierenbutton); untenlinksmuffen.add(sortierenbutton); untenlinksmuffen.add(loeschenbutton); //unten rechts untenrechtsmuffen.add(leertext); untenrechtsmuffen.add(vergleichetext); untenrechtsmuffen.add(vertauschetext); untenrechtsmuffen.add(sortierverfahren1text); untenrechtsmuffen.add(a11); untenrechtsmuffen.add(a12); untenrechtsmuffen.add(sortierverfahren2text); untenrechtsmuffen.add(a21); untenrechtsmuffen.add(a22); untenrechtsmuffen.add(sortierverfahren3text); untenrechtsmuffen.add(a31); untenrechtsmuffen.add(a32); untenrechtsmuffen.add(sortierverfahren4text); untenrechtsmuffen.add(a41); untenrechtsmuffen.add(a42); //allet oberes.add(zahlenoben); oberes.add(auswahlrechts); unteres.add(untenlinksmuffen); unteres.add(untenrechtsmuffen); window.add(oberes); window.add(unteres); setContentPane(window); //actionmuffen zahlenoben.addActionListener(this); auswahlrechts.addActionListener(this); generierenbutton.addActionListener(this); loeschenbutton.addActionListener(this); sortierenbutton.addActionListener(this); auswahlrechts.setText("0"); } public void arrayswap(int array[],int a, int b){ int ablage = array[a]; array[a] = array[b]; array[b] = ablage; } public void actionPerformed(ActionEvent e){ if(e.getActionCommand() == "generieren"){ int i; zahlen = new int [Integer.valueOf((auswahlrechts.getText()).trim()).intValue()]; i = zahlen.length - 1; Random rand = new Random(); while(i > -1){ zahlen[i] = rand.nextInt(100); i = i - 1; } i = zahlen.length-1; zahlenoben.setText(""); while(i > -1){ zahlenoben.setText(zahlenoben.getText() + zahlen[i] + " "); i = i - 1; } } if(e.getActionCommand() == "loeschen"){ zahlenoben.setText(""); } if(e.getActionCommand() == "sortieren"){ int tmp0 = 0; int bubbleswaps = 0; int bubblevgl = 0; int laenge = zahlen.length; while(tmp0 < laenge){ if(zahlen[tmp0] > zahlen[tmp0+1]){ arrayswap(zahlen,tmp0,tmp0+1); bubbleswaps = bubbleswaps + 1; if(tmp0 != laenge){ tmp0 = tmp0 + 1; } } else{ bubblevgl++; if(tmp0 != laenge){ tmp0 = tmp0 + 1; } if(laenge > 0){ laenge = laenge - 1; } } } System.out.println(bubbleswaps + " " + bubblevgl); int i=0; while(i<zahlen.length){ System.out.println(zahlen[i]); i++; } } }}
-
-
Das Problem könntest du lösen, indem du tmp0 mit 1 initialisiert und dann zahlen[tmp0-1] mit zahlen[tmp0] vergleichst.
Btw. Hat es einen bestimmte Grund, warum du Bubblesort nimmst? Es gibt weit effizientere Algorithmen.
-
Hmm... So sieht der Code jetzt aus :
PHP
Alles anzeigenimport java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.Random; public class SwingFrame extends JFrame implements ActionListener{ JPanel untenrechtsmuffen = new JPanel(); JPanel untenlinksmuffen = new JPanel(); JPanel window = new JPanel(); // das Fenster JPanel oberes = new JPanel(); JPanel unteres = new JPanel(); int zahlen[]; //oben links JTextField zahlenoben = new JTextField(50); //oben rechts JTextField auswahlrechts = new JTextField(3); //unten links JButton generierenbutton = new JButton("generieren"); JButton sortierenbutton = new JButton("sortieren"); JButton loeschenbutton = new JButton("loeschen"); //unten rechts JLabel leertext = new JLabel(""); JLabel vergleichetext = new JLabel("Vergleiche"); JLabel vertauschetext = new JLabel("Vertauschungen"); JLabel sortierverfahren1text = new JLabel("Sortierverfahren1"); JLabel sortierverfahren2text = new JLabel("Sortierverfahren2"); JLabel sortierverfahren3text = new JLabel("Sortierverfahren3"); JLabel sortierverfahren4text = new JLabel("Sortierverfahren4"); JTextField a11 = new JTextField(20); JTextField a12 = new JTextField(20); JTextField a21 = new JTextField(20); JTextField a22 = new JTextField(20); JTextField a31 = new JTextField(20); JTextField a32 = new JTextField(20); JTextField a41 = new JTextField(20); JTextField a42 = new JTextField(20); public SwingFrame(){ super("Sortierungs-GUI"); setSize((int)Math.round(700/16)*16,(int)Math.round(200/16)*16); setDefaultCloseOperation(SwingFrame.EXIT_ON_CLOSE); GridLayout Grid2 = new GridLayout(5,3); //unten rechts muffen GridLayout Grid3 = new GridLayout(1,3); // unten links muffen GridLayout windowlayout = new GridLayout(2,1); FlowLayout obenflow = new FlowLayout(); GridLayout untereslayout = new GridLayout(1,2); untenrechtsmuffen.setLayout(Grid2); untenlinksmuffen.setLayout(Grid3); window.setLayout(windowlayout); oberes.setLayout(obenflow); unteres.setLayout(untereslayout); //unten links untenlinksmuffen.add(generierenbutton); untenlinksmuffen.add(sortierenbutton); untenlinksmuffen.add(loeschenbutton); //unten rechts untenrechtsmuffen.add(leertext); untenrechtsmuffen.add(vergleichetext); untenrechtsmuffen.add(vertauschetext); untenrechtsmuffen.add(sortierverfahren1text); untenrechtsmuffen.add(a11); untenrechtsmuffen.add(a12); untenrechtsmuffen.add(sortierverfahren2text); untenrechtsmuffen.add(a21); untenrechtsmuffen.add(a22); untenrechtsmuffen.add(sortierverfahren3text); untenrechtsmuffen.add(a31); untenrechtsmuffen.add(a32); untenrechtsmuffen.add(sortierverfahren4text); untenrechtsmuffen.add(a41); untenrechtsmuffen.add(a42); //allet oberes.add(zahlenoben); oberes.add(auswahlrechts); unteres.add(untenlinksmuffen); unteres.add(untenrechtsmuffen); window.add(oberes); window.add(unteres); setContentPane(window); //actionmuffen zahlenoben.addActionListener(this); auswahlrechts.addActionListener(this); generierenbutton.addActionListener(this); loeschenbutton.addActionListener(this); sortierenbutton.addActionListener(this); auswahlrechts.setText("0"); } public void arrayswap(int array[],int a, int b){ int ablage = array[a]; array[a] = array[b]; array[b] = ablage; } public void actionPerformed(ActionEvent e){ if(e.getActionCommand() == "generieren"){ int i; zahlen = new int [Integer.valueOf((auswahlrechts.getText()).trim()).intValue()]; i = zahlen.length - 1; Random rand = new Random(); while(i > -1){ zahlen[i] = rand.nextInt(100); i = i - 1; } i = zahlen.length-1; zahlenoben.setText(""); while(i > -1){ zahlenoben.setText(zahlenoben.getText() + zahlen[i] + " "); i = i - 1; } } if(e.getActionCommand() == "loeschen"){ zahlenoben.setText(""); } if(e.getActionCommand() == "sortieren"){ int tmp0 = 1; int bubbleswaps = 0; int bubblevgl = 0; int laenge = zahlen.length; while(tmp0 < laenge){ if(zahlen[tmp0] > zahlen[tmp0+1]){ arrayswap(zahlen,tmp0-1,tmp0); bubbleswaps = bubbleswaps + 1; if(tmp0 != laenge-1){ tmp0 = tmp0 + 1; } } else{ bubblevgl++; if(tmp0 != laenge-1){ tmp0 = tmp0 + 1; } if(laenge > 0){ laenge = laenge - 1; } } } System.out.println(bubbleswaps + " " + bubblevgl); int i=0; while(i<zahlen.length){ System.out.println(zahlen[i]); i++; } } }}
Keine Überläufe mehr, allerdings funzt auch das Sortieren nicht
-
Btw. Hat es einen bestimmte Grund, warum du Bubblesort nimmst? Es gibt weit effizientere Algorithmen.
Die englische Wikipedia hat da eine schöne Übersicht mit detailierten Informationen.
http://en.wikipedia.org/wiki/Sorting_algorithmAuch zu Bubble sort.
-
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!