2016-11-20 4 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), чтобы получить (j) снова? –

+2

@AndrewtheProgrammer нашел ошибку. Вы хотите иметь 'theBatter.get (j + 1)' в своем '' '' '' 'методе' compareToIgnoreCase'. –

+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 
       } 
      } 
     } 
Смежные вопросы