[Java] Schleifen/Sortierproblem

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von osiris, 22. November 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 22. November 2010
    Schleifen/Sortierproblem

    Hi,

    habe da eine kurze Frage.

    Ich hab hier eine Schleife, welche alle geraden Zahlen nach vorne und alle ungeraden Zahlen nach hinten sortieren soll.

    Code:
    for(i=0; i<numbers.length; i++){
     position1 = numbers[i]%2;
     if (position1 == 1){
     for(j=numbers.length; j>=0; j--){
     position2 = numbers[j]%2;
     if (position2 == 0){
     help = numbers[j];
     numbers[j] = numbers[i];
     numbers[i] = help;
     }
     }
     }
     }
    Wenn ich das so wies da steht übernehme, kommt:

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at Bsp12a.main(Bsp12a.java:53)
    Java Result: 1

    Zeile 53 = position2 = numbers[j]%2;


    Mache ich allerdings

    Code:
    for(i=0; i<numbers.length; i++){
     position1 = numbers[i]%2;
     if (position1 == 1){
     for(j=numbers.length[B]-1[/B]; j>=0; j--){
     position2 = numbers[j]%2;
     if (position2 == 0){
     help = numbers[j];
     numbers[j] = numbers[i];
     numbers[i] = help;
     }
     }
     }
     }
    Dann wird das zwar alles schön sortiert, allerdings ist die letzte Zahl, welche bei der Ausgabe angezeigt wird, immer gerade. Der Rest ist schön sortiert.
    Beispielsweise: (gerade, gerade, ungerade, ungerade, gerade)

    Kann mir da jemand weiterhelfen?!
     
  2. 22. November 2010
    AW: Schleifen/Sortierproblem

    problem bei der exception ist diese zeile:

    Code:
    for(j=numbers.length; j>=0; j--)
    numbers.lenght ist +1 größer als der letzte index im array. sprich array a = new array[10] -> a.length = 10, es gibt aber nur a[9] als letzten index.

    müsstest also eines der beiden schreiben:
    Code:
    for(j=numbers.length[B]-1[/B]; j>=0; j--)
    Code:
    for(j=numbers.length; j>=0; [B]--[/B]j)
    weil du im 2. code die for-schleife bis i < numbers.length laufen lässt, wird i niemals 10. bei <= würdest du genau den selben fehler erhalten.

    // der edit war quatsch grad...moment ^^
     
  3. 22. November 2010
    AW: Schleifen/Sortierproblem

    Jo, wie erwähnt:

    Wenn ich j=numbers.length-1 eingebe, dann wird das ganze Ding schön sortiert, kein Problem.

    Wenn ich beispielsweise die Zahlen: 0, 1, 2, 3, 4. eingebe, dann wird folgendes ausgegeben: 4, 2, 3, 1, 0.

    Warum ist da die letzte Zahl IMMER & ausnahmslos GERADE?

    E:/ hier das ganze Programm, falls das jemandem weiter helfen sollte:

    Code:
    public class Sortierung {
    
     public static void main(String[] args){
    
     int aLength, i = 0, help = 0, position1, j, position2;
     int[] numbers;
    
     //Einlesen der Länge
     System.out.println("Bitte geben Sie die Anzahl der folgenden Zahlen ein. (Positive Zahl!)");
     aLength = SavitchIn.readLineInt();
    
     //Falls die Zahl negativ sein sollte.
     if (aLength<0){
     System.out.println("Zahl ist negativ, wird mit -1 multipliziert!");
     aLength = aLength*(-1);
     }
    
     //Wenn die Zahl 0 ist wird das Programm beendet!
     if (aLength==0){
     System.out.println("Keine Zahlen, Programm wird abgebrochen!");
     return;
     }
    
     //Anlegen des Arrays inkl. eingabe der ersten Zahl
     numbers = new int[aLength];
     System.out.println("Bitte geben Sie eine Zahl ein:");
     numbers[0] = SavitchIn.readLineInt();
    
     //Eingabe der restlichen Zahlen
     for(i=1; i<numbers.length; i++){
     System.out.println("Geben Sie bitte die nächste Zahl ein:");
     numbers[i] = SavitchIn.readLineInt();
     }
    
     //Ausgabe der eingegebenen Zahlen
     System.out.println();
     System.out.println("Fertig mit dem einlesen der Zahlen.");
     System.out.println("Folgende Zahlen wurden durch den Benutzer eingegeben");
     for(i=0; i<numbers.length-1; i++){
     System.out.print(numbers[i] + ", ");
     }
     System.out.println(numbers[aLength-1] + ".");
    
     //Eigentliche Sortier Schleife
     for(i=0; i<numbers.length; i++){
     position1 = numbers[i]%2;
     if (position1 == 1){
     for(j=numbers.length-1; j>=0; j--){
     position2 = numbers[j]%2;
     if (position2 == 0){
     help = numbers[j];
     numbers[j] = numbers[i];
     numbers[i] = help;
     }
     }
     }
     }
    
     System.out.println();
     System.out.println();
    
     System.out.println("Die Zahlen sortiert: ");
     System.out.println();
     for(i=0; i<numbers.length-1; i++){
     System.out.print(numbers[i] + ", ");
     }
    
     System.out.println(numbers[aLength-1] + ".");
     }
    
    }
    

    Edit:/

    Hab mittlerweile meinen Gedankengang zu ende geführt.

    Problem:
    Eine positive Zahl wird immer "aufgehalten" und dann einfach am Ende ausgedruckt, weils anscheinend fertig ist.

    Lösung:
    Letzte Zahl (die ist IMMER positiv) mit der ersten ungeraden Zahl vertauschen.

    Habs geschafft..
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.