2016-11-20 74 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發現了這個錯誤。你想擁有'在'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 
       } 
      } 
     }