2015-07-21 44 views
0

所以我試圖按字母順序使用線性排序對單詞進行排序,並刪除單詞,如果已經有一個像這樣的單詞。我用了下面的方法:排序,但一切都被刪除

import java.util.Arrays; 

public class Sorting { 

    public static void main(String[] args) { 

     String[] array = new String[] { "pepperoni", "ham", "bacon", 
       "pineapple", "ham", "sausage", "onion", "bacon" }; 

     System.out.println("Before sorting: " + Arrays.toString(array)); 

     for (int i = 0; i < array.length; i++) { 
      int min = i; 

      for (int j = i; j < array.length; j++) { 

       if (array[min].compareTo(array[j]) > 0) { 
        min = j; 
       } 

       else if (array[min].equals(array[j]) == true) { 
        array[j] = ""; 
       } 
      } 

      String tmp = array[i]; 
      array[i] = array[min]; 
      array[min] = tmp; 
     } 
     System.out.println("After sorting: " + Arrays.toString(array)); 
    } 
} 

但是一切都被刪除了。如果沒有else if聲明,它將被整理出來,但是一切都被刪除了。

Before sorting: [pepperoni, ham, bacon, pineapple, ham, sausage, onion, bacon] 
After sorting: [, , , , , , , ] 

有人能指出這段代碼有什麼問題嗎?

+0

'如果(陣列[分鐘] .equals(陣列[j])== TRUE)'?見http://stackoverflow.com/questions/404838/do-you-prefer-if-var-or-if-var-0/404846#404846 – paxdiablo

回答

4

我認爲兩者的應該是:

for(i = 0; i < array.length - 1; i++) 

for(j = i + 1; j < array.length; j++) 

那麼你肯定ij總是不同的。實際上,在你的實現中,你總是將元素與元素本身進行比較,而你(錯誤地)認爲它是重複的。

而且可以使用:

if(array[min] < array[j]) 

else if(array[min].equals(array[j])) 
+0

你爲什麼這麼想? –

+0

@TimCastelijns否則他會將元素與自身進行比較,這就是爲什麼我認爲它在某個時候被刪除的原因。 –

+1

@TimCastelijns,因爲如果'j = i',那麼'array [min] .equals(array [j])'將始終爲真。因此,所有元素將被替換爲空白字符串。 @ enrico.bacis +1 –