2016-11-20 5 views
3

Ich versuche, eine Arraylist von Objekten durch die Variable des Objekts alphabetisch zu sortieren, die "Name" genannt wird. Hier ist der Code, den ich schrieb, dies zu tun:Warum funktioniert meine Blasensortierung nicht? - Java

public void sortName() 
    { 
     int j; 

     for (j = 0; j < theBatters.size()-1; j++) 
     { 
      System.out.println(theBatters.get(j).getName().compareToIgnoreCase(theBatters.get(j+1).getName())); 
      if (theBatters.get(j).getName().compareToIgnoreCase(theBatters.get(j).getName()) > 0) 
      {            // ascending sort 
       Collections.swap(theBatters, j, j+1); 
       j=0; 
      } 
     } 
    } 

Ich glaube, das Problem etwas mit der Linie zu tun hat, wo Swap verwendet wird, wenn ich drucken Sie die Arraylist, nachdem ich dieses sortName() -Methode ist alles in die gleiche Reihenfolge, trotz dieser Linie Wert größer als 0 zurückkehrt, wenn es soll:

System.out.println(theBatters.get(j).getName().compareToIgnoreCase(theBatters.get(j+1).getName())); 
+0

In Ihrer if-Anweisung, warum vergleichen Sie bekommen (j) zu bekommen (j) wieder? –

+2

@AndrewtheProgrammer hat den Fehler gefunden. Sie möchten 'theBatter.get (j + 1)' in Ihrer 'if' Anweisung in der 'compareToIgnoreCase' Methode haben. –

+0

Ich bin froh, dass ich helfen konnte, ich weiß, dass einfache Fehler wie diese nur schwer zu finden sind –

Antwort

0

der Name der Blase Art bedeutet, dass es Blase sortierter und unsortierter Produkte ist. Du hast diese Tatsache einfach vergessen. Hier ist arbeiten (ich hoffe) Code:

public void sortName() 
     { 

      for (int i = 0; i < theBatters.size()-1; i++) // bigger outer bubble 
      for (int j = i+1; j < theBatters.size()-1; j++) // smaller inner bubble 
      {     System.out.println(theBatters.get(i).getName().compareToIgnoreCase(theBatters.get(j).getName())); 
       if (theBatters.get(i).getName().compareToIgnoreCase(theBatters.get(j).getName()) > 0) 
       {            // ascending sort 
        Collections.swap(theBatters, i, j); 
        // j=0; // Not necessary and confusing. It is already in good order 
       } 
      } 
     } 
Verwandte Themen