2015-03-02 2 views
0

Я прочитал файл с городами и его населением, и я стараюсь сортировать города по алфавиту с помощью сортировки. Проблема в том, что по какой-то причине она сортирует ее по-разному. Порядок «отсортированного» списка «ABDCEFHG ...» Я пробовал следовать за ним, но я не могу понять, где это происходит. Это код:Выбор Сортировка строк

//Selection 
    for (int i = 0; i < cities.size() - 1; i++) 
    { 
     int minPos = i; 
     for (int j = i + 1; j < cities.size(); j++) 
     { 
      if (cities.get(j).compareToIgnoreCase(cities.get(minPos)) < -1) 
       minPos = j; 
     } 
     swap(cities, minPos, i); 
    } 
    System.out.print("\nSelection: "); 
    for(int i = 0; i < cities.size(); i++) 
     System.out.print(cities.get(i) +"|"); 

private static void swap(ArrayList <String> a, int i, int j) 
{ 
    String temp = a.get(i); 
    a.set(i, a.get(j)); 
    a.set(j, temp); 
} 

Любая идея, что не так?

Благодаря

+3

Вы пытались использовать '... <0' вместо' ... <-1'? – August

+3

Почему вы используете <-1? вы должны использовать <0 – thermite

+0

Да, это была проблема. Это был первый случай, когда я использовал сравнение строк, поэтому я с ним немного новый. Спасибо! – Nik

ответ

0

Как уже упоминалось, ваша проблема почти наверняка ваша ... < -1 сравнение, которое по существу бессмысленно в контексте сравнения. Как указано в Comparable, сравнения в Java, как правило, осуществляется путем возврата

отрицательное целое число, ноль или положительное целое число, как этот объект меньше, равен или больше указанного объекта.

String.compareToIgnoreCase() следует тому же правилу:

Returns: 
    a negative integer, zero, or a positive integer as the specified 
    String is greater than, equal to, or less than this String, ignoring 
    case considerations. 

Эти контракты намеренно не говоря уже о том, что эти отрицательные или положительные числа может быть, и поэтому реализации способны делать все проще. Многие реализации будут явно возвращать -1, 0 или 1, но другие, в том числе в String, используют вычитание как ярлык, возвращая разницу между сравниваемыми элементами, например. x.compareTo(y). return x-y. Если x и y те же, результат 0, в противном случае он возвращает отрицательное число, если x меньше, а положительное число, если x больше.

Короче говоря, вы должны всегда использовать 0 в качестве точки сравнения.

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

  • Нет связанных вопросов^_^