Hallo Spezialisten, hallo Freaks,
ich grübel seit Stunden an folgendem Sachverhalt:
Array-List nach Bubble-Sort neu sortieren (eigenständige Sortierung programmieren).
Dazu habe ich mir folgende Idee gemacht:
Ich arbeite mit einer for-Schleife und darin mit einer if-Abfrage, die mittels
limV.get(x) > limV.get(x+1) vergleicht, ob die 1. Zahl in der ArrayList größer
ist, als die 2. Zahl. Falls ja, dann werden die beiden Zahlen getauscht.
Am Ende, so die Idee, sollten dann die Inhalte der ArrayList sortiert sein
(x = ist kleiner als x+1, x+1 ist kleiner als x+2, ...) Leider ist das Ergebnis nicht
richtig, und auch ein Error wird mir angezeigt.
So ist meine Programmier-Idee. Freue mich über Hinweise, damit ich das Problem meistern kann. Vielen Dank!
ich grübel seit Stunden an folgendem Sachverhalt:
Array-List nach Bubble-Sort neu sortieren (eigenständige Sortierung programmieren).
Dazu habe ich mir folgende Idee gemacht:
Ich arbeite mit einer for-Schleife und darin mit einer if-Abfrage, die mittels
limV.get(x) > limV.get(x+1) vergleicht, ob die 1. Zahl in der ArrayList größer
ist, als die 2. Zahl. Falls ja, dann werden die beiden Zahlen getauscht.
Am Ende, so die Idee, sollten dann die Inhalte der ArrayList sortiert sein
(x = ist kleiner als x+1, x+1 ist kleiner als x+2, ...) Leider ist das Ergebnis nicht
richtig, und auch ein Error wird mir angezeigt.
Code:
java.lang.IndexOutOfBoundsException: Index: 5, Size: 5
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at Beleg_SS_2016.BaustelleEinrichten.sortieren(BaustelleEinrichten.java:62)
at Beleg_SS_2016.__SHELL3.run(__SHELL3.java:8)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at bluej.runtime.ExecServer$3.run(ExecServer.java:730)
So ist meine Programmier-Idee. Freue mich über Hinweise, damit ich das Problem meistern kann. Vielen Dank!
Java:
public class BaustelleEinrichten
{
private static ArrayList<Baucontainer> bcListe = new ArrayList<Baucontainer>();
private static ArrayList<Double> limV = new ArrayList<>();
private static Kran kran;
private static double limX;
public static void einrichten(int n){
Beleg2 id2 = new Beleg2();
id2.createUUID();
System.out.println("==================");
for (int i = 0; i < n; i++){
Random zufall = new Random();
double breite = zufall.nextDouble()*16+5;
double laenge = zufall.nextDouble()*21+20;
double hoehe = zufall.nextDouble()*5+1;
Baucontainer bc = new Baucontainer(100+i*50, 200, laenge, breite);
bc.setHoehe(hoehe);
bc.setVisible(true);
bcListe.add(bc);
double volumen = breite*hoehe*laenge;
limV.add(volumen);
limX = 150+i*50; // für eine neue Sortierung nach dem letzten Container
System.out.println("Container-Nr.: " + i + " | Volumen: " + volumen + " cm³" + limV.get(i) + " ");
}
Baustrasse bs = new Baustrasse(0,50,1000,50,40);
bs.setVisible(true);
kran = new Kran(400, 300, 50, 350);
kran.setVisible(true);
}
public static void sortieren(){
double limV2;
double limV3;
for (int x = 0;x<=bcListe.size()-1;x++){
if (limV.get(x) > limV.get(x+1) ){
System.out.println(x + ". Stelle " + limV.get(x));
System.out.println(x + ". Stelle " + limV.get(x+1));
limV2=limV.get(x);
limV3=limV.get(x+1);
limV.remove(x);
limV.remove(x+1);
limV.add(x,limV3);
limV.add(x+1,limV2);
for (int z = 0;z<=bcListe.size()-1;z++){
System.out.println(limV.get(z));
}
}
}
kran.ladeBaucontainerAuf(bcListe.get(0));
kran.ladeBaucontainerAb(bcListe.get(0), 100, 150);
}
}