[Java] Bubblesort funktioniert nicht

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von MyriaN, 28. März 2008 .

  1. 28. März 2008
    Bubblesort funktioniert nicht

    Hallo RR-Comunity !

    Ich habe folgende Methode geschrieben, aber wenn ich sie ausführe passiert nix. Die Konsole bleibt einfach wie eingefroren stehen. Hat vielleicht jemand eine Ahnung was ich falsch gemacht habe ??(

    MyriaN

    Code:
    public static void Bubblesort()
     {
     for (int i=1;i<=7;i++)
     {
     double temp;
     for (int j=1;j<=7;i++)
     {
     if (Liste[j-1]>=Liste[j])
     {
     temp=Liste[i-1];
     Liste[i-1]=Liste[i];
     Liste[i]=temp;
     }
     }
     }
     System.out.println("Done");
     System.out.println();
     Ausgabe();
     }
     
  2. 28. März 2008
    AW: Bubblesort funktioniert nicht

    Mhh,
    So spontan würde ich erstma fragen, ob das dein gesamter Code ist ?
    Das Array oder die Liste "Liste" wird in deinem Beispiel der Funktion gar nicht übergeben oder irre ich mich da ?

    Kommen denn irgendwelche Fehlermeldungen ?

    EDIT :
    Das müsste so funktionieren ^^
    Code:
    public void BSort ( int[] EineListe) {
    // Es muss eine Variable vom Datentyp Array übergeben werden.
    boolean sortiert = false;
     for (int i = 1; i < EineListe.length; i++)
     {
     sortiert = false; // Um nachzuprüfen, ob das Array schon sortiert wurde hinterher
     for(int j = 0; j < EineListe.length - i; j++)
     {
     if(EineListe[j] > EineListe[j+1])
     {
     int HilfsVariable= EineListe[j];
     EineListe[j] = EineListe[j+1];
     EineListe[j+1] = HilfsVariable;
     Sortiert = True;
     }
     }
    } 
    
    EDIT NR.2 :
    Hab nen Haufen zu lernen gehabt....
    Hihi, wünsche dir viel Spaß mit Info im Abi :-D
    Ich geh zurück zu Wikipedia lesen...
    Bis Montag !


    Die Tüte
     
  3. 28. März 2008
    AW: Bubblesort funktioniert nicht

    das problem liegt in dieser zeile. meiner meinung nach müsste es ein j++ sein, da du sonst nirgendwo j erhöhst, also ist die bedingung j<=7 immmer erfüllt und du hast eine wunderbare endlosschleife

    EDIT: desweiteren vertauscht du innerhalb der if anweisung die arrayelemente an der stelle i, obwohl du die stelle j mit if überprüfst. Vielleicht hilft dieser Link
     
  4. 28. März 2008
    AW: Bubblesort funktioniert nicht

    Ahh, die Tüte lebt !!! Wo steckst du denn die ganze zeit ?^^ Hoffentlich wird das Wetter nächste Woche angenhem damit wir den Romerich unsicher machen können.

    b2t:

    Bei dem j hab ich nicht aufgepasst, danke!^^ Jetzt kommt:
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
    at Sortieren2.Bubblesort(Sortieren2.java:36)
    at Sortieren2.main(Sortieren2.java:17)


    Hier mal der gesamt Code:

    Code:
    public class Sortieren2 {
    
     public static double Liste[] = new double[7];
    
    
     public static void main(String[] args)
     {
     Zahlen();
     Bubblesort();
     }
     
     public static void Zahlen()
     {
     for (int i=0;i<=6;i++)
     {
     Liste[i]=(Math.random()*100);
     }
     Ausgabe();
     }
     
     public static void Bubblesort()
     {
     for (int i=1;i<=7;i++)
     {
     double temp;
     for (int j=1;j<=7;j++)
     {
     if (Liste[j-1]>=Liste[j])
     {
     temp=Liste[i-1];
     Liste[i-1]=Liste[i];
     Liste[i]=temp;
     }
     }
     }
     System.out.println("Done");
     System.out.println();
     Ausgabe();
     }
     
     public static void Ausgabe()
     {
     for (int i=0;i<=6;i++)
     {
     System.out.print("Wert " + i + ": ");
     System.out.println(Math.round(Liste[i]));
     }
     }
    }
     
  5. 28. März 2008
    AW: Bubblesort funktioniert nicht

    Hier das funktioniert auf jeden fall, ist kommentiert und getestet
    die Datei musst du nur bennen in: BubbleSortMuster

    Istn Muster von meinem Java Lehrer^^

    Viel spaß

    (bw wäre nett )

    Code:
    //**************************************************************
    //Autor: mySQL
    //Datum: 28.12.2004
    //Version: 1.0
    //Datei: BubbleSort.java
    //**************************************************************
    import java.io.*;
    public class BubbleSortMuster
    {
     public static void main(String argv[])throws IOException
     {
     int feld[];
     int anzahl;
     boolean tausch;
     int i;
     BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
    
    
     System.out.println("BubbleSort");
    
     System.out.print("Feldgroesse: ");
     anzahl = Integer.parseInt(eingabe.readLine());
     //
     //
    
     feld = new int[anzahl];
     //
    
     System.out.println("Feld mit Zufallszahlen gefuellt...");
     System.out.print("Feld unsortiert: ");
    
     i=anzahl-1; //
     //
     //
    /*=========================================================================
     * 'Automatische' Erzeugung und Füllung eines Datenfeldes mit Zufallszahlen
     *=========================================================================*/
     for(int a=0; a<anzahl;a++)
     {
     //solange die deklarierte Laufvariable (=Indexwert des Feldes) kleiner
     // als die eingegebene Länge des Feldes (= Anzahl der zu sortierenden Zahlen)
     // wird mit
     feld[a]=(int)(Math.random()*100);
     // eine neue Zufallszahl erzeugt: Methode random ( hier wird
     // die Zufallszahl noch mit 100 multipliziert und in eine Ganzzahl umgewandelt)
     // und die Zahl wird an Position mit Indexwert a im Datenfeld abgelegt
     // sowie mit
    
     System.out.print(feld[a]+" ");
     // auf dem Bildschirm angezeigt, so dass wie in Zeile 30 angekündigt (siehe oben)
     // das Feld in unsortiertem Zustand ausgegeben wird.
     }//for(int i=0; i<anzahl;i++)
    
    /*=============================================================
     * Durchführung des Sortiertvorganges des Datenfeldes
     *============================================================*/
     System.out.println("\nSortierung laeuft...");
    
     do
     { // führe folgendes aus
     tausch=false; // dient zum Abbruch der do-while-Schleife vgl. unten
    
     for(int j=1;j<=i;j++)
     { // solange die Laufvariable j
     // kleiner/gleich der höchsten zu prüfenden Positionsnummer(Indexwert)im Datenfeld
     //
     // (Anmerkung: Diese höchste zu prüfende Positionsnummer funktioniert
     // hier wie eine Grenze [vgl. while-Bedingung unten], die den
     // jeweils noch zu sortierenden
     // Teil des Arrays vom bereits richtig sortierten Teil des
     // Arrays trennt.
     // wird mit
    
     if(feld[j-1]>feld[j])
     { //geprüft, ob die Zahl 'links' größer der Zahl rechts ist;
     // wenn ja, wird mit
    
     int hilf = feld[j-1];
     // eine Hilfsvariable deklariert und dort die Zahl des linken
     // Feldes abgelegt/zwischengespeichert
     // und mit
    
     feld[j-1]=feld[j];
     // die Zahl im rechten Feld im gesamten Datenfeld, um eine Stelle
     // nach 'vorn' geholt, sowie ausserdem mit
    
     feld[j]=hilf;
     // die Zahl in der Hilfsvariable in das rechte Feld gelegt;
     // Zusammenfassend die Zahlen in den beiden Feldern des Datenfeldes
     //werden getauscht!
    
     //for-Schleife prüft in folgender Reihenfolge:
     // 1. gegen 2. Feld/Element
     // 2. gegen 3. Feld/Element
     // 3. gegen 4. Feld/Element usw. bis schließlich
     // der höchste Zahlenwert in den Feldern/Elementen des Arrays
     // ganz nach rechtsgewandert ist.
    
     tausch=true;
     }
     }
     i--; //Nachdem z. B. im ersten Durchlauf der obigen for-Schleife,
     // der höchste Zahlenwert bereits ganz nach rechts in das
     // Feld/Element des Arrays mit dem höchsten Indexwert gewandert ist
     // - und dort natürlich auch bleiben muss - muss dieses Feld/Element
     // nicht mehr weiter bei der Sortierung berücksichtig werden.
     // Der erneut zu prüfende Teil des Arrays wird also von rechts um ein
     // Element verkleinert.
     }
     while(i>0 && tausch);
     // solange das Array noch noch einen unsortiertern 'linken' Teil enthält UND im
     //vorausgegangenen Durchlauf der for-Schleife noch Täusche stattfanden
    
    /*=============================================================
     * Ausgabe des Sortierten Datenfeldes
     *============================================================*/
     System.out.print("Feld sortiert: ");
     for(int a=0; a<anzahl;a++)
     {
     System.out.print(feld[a]+" ");
     }//for(int i=0; i<anzahl;i++)
     System.out.println("Programmende BubbleSort.");
     }//main
    }//class
    
     
  6. 29. März 2008
    AW: Bubblesort funktioniert nicht

    Hehe du hast nen kleinen Fehler gemacht... Dein Array "liste" hat die Plätze 0 bis 6 aber dein Bubblesort geht ja hier:

    Code:
    if (Liste[j-1]>=Liste[j])
    die Plätze von j-1 = 0 bis j = 7 durch und nen Platz 7 hat dein Array nicht darum auch die ArrayIndexOutOfBounds Exception


    Und du hast beim Vergleichen der Arraypositionen immer "i" benutzt aber da gehört glaub ich "j" hin



    Hier mal dein Code ohne diese Fehler... hab es nicht getestet... :

    Code:
    public static void Bubblesort()
     {
     for (int i=1;i<=7;i++)
     {
     double temp;
     for (int j=1;j<=6;j++)
     {
     if (Liste[j-1]>=Liste[j])
     {
     temp=Liste[j-1];
     Liste[j-1]=Liste[j];
     Liste[j]=temp;
     }
     }
     }
     System.out.println("Done");
     System.out.println();
     Ausgabe();
     }
     
  7. 30. März 2008
    AW: Bubblesort funktioniert nicht

    auch die erste for-schleife läuft von 1 bis 7, in java gehen arrays jedoch von 0 los, also bis 6 in deinem fall. willst du jetzt auf die stelle 7 zugreifen bekommst die out-of-bounds - exception
     
  8. 31. März 2008
    AW: Bubblesort funktioniert nicht

    Falsch die erste Schleife läuft zwar von 1 bis 7 aber der Index dieser Schleife wird nie verwendet um auf das Array zuzugreifen. Es ist ja ein Bubblesort und die erste Schleife muss nur oft genug laufen damit die zweite Schleife auch ja alle Felder vertauscht.
     
  9. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.