2015-07-21 2 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++) 

Таким образом, вы уверены, что i и j всегда различны. В вашей реализации на самом деле вы всегда сравниваете элемент с самим элементом, и вы (ошибочно) предполагаете, что это дубликат.

Более того, вы можете использовать:

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

и

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

Почему вы так думаете? –

+0

@TimCastelijns В противном случае он сравнивает элемент также с самим собой, поэтому я предполагаю, что он удаляется в какой-то момент. –

+1

@TimCastelijns, потому что если 'j = i', то' array [min] .equals (array [j]) 'всегда будет true. И таким образом, все элементы будут заменены пустой строкой. @ enrico.bacis +1 –

Смежные вопросы