2016-11-20 14 views
3

"名前"という名前のオブジェクトの変数で、オブジェクトのarraylistをアルファベット順でソートしようとしています。ここで私はそうすることを書いたコードは次のとおりです。私のバブルソートはなぜ機能しないのですか? - 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; 
      } 
     } 
    } 

私は問題はスワップが使用されているラインとは何かを持っている、ため、私はArrayListのを印刷するとき、私はこのSORTNAME()メソッドを使用した後、すべてがであると信じて同じ順序では、この行は、それにはなっている0より大きい値を返すにもかかわらず:

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

ifステートメントでは、どうしてget(j)とget(j)をもう一度比較していますか? –

+2

@AndrewtheProgrammerがバグを見つけました。 'compareToIgnoreCase'メソッドの' if'文に 'theBatter.get(j + 1)'を入れたいとします。 –

+0

喜んで私は助けることができる、私はそれのような単純な間違いがちょうどそれを見ることによって見つけるための痛みであることを知っている –

答えて

0

バブルソートの非常に名前がソートされ、ソートされていない項目のバブルがあることを意味します。あなたは単にこの事実を忘れただけです。ここで働いています(私が願っています)コード:

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 
       } 
      } 
     } 
関連する問題