Сортировка 2 строк внутри массива строк (Java) - PullRequest
0 голосов
/ 08 декабря 2011

У меня есть два массива, один для температур и один для городов. Если две температуры одинаковы, соответствующие города должны быть показаны в алфавитном порядке сортировки. Например,

  • 24 Сидней
  • 22 Афины
  • 22 Окленд
  • 20 Барселона

---> Это код сортировки.

public static void sort(String[] x , double[] y) {
    boolean doMore = true;

    while(doMore) {    
        doMore = false;  

        for(int i=0; i< x.length-1; i++) {    
            if(y[i] == y[i+1] && x[i] < x[i+1]) {    
                String temp2 = x[i];
                x[i] = x[i+1];
                x[i+1] = temp2;    
            } else if (y[i] < y[i+1]) {    
                double temp = y[i];    
                y[i] = y[i+1];    
                y[i+1] = temp; 

                String temp2 = x[i];        
                x[i] = x[i+1];    
                x[i+1] = temp2;    
                doMore = true;    
            }//if    
        }//for 2    
    }//while    
}// sort */

Проблемав том, что на if(y[i] == y[i+1] && x[i] < x[i+1]) я не могу просто сравнить 2 строки с оператором >.Я также не могу использовать готовые методы сортировки.

Кто-нибудь знает, как сортировать строки по алфавиту?

Ответы [ 2 ]

4 голосов
/ 08 декабря 2011

String равно Comparable, поэтому вы можете использовать s1.compareTo(s2)

Подробнее см. String.compareTo; он возвращает что-то отрицательное, 0 или что-то положительное, в зависимости от того, стоит ли s1 перед лексикографически перед s2, то есть будет ли s1 стоять перед s2 в словаре.

1 голос
/ 08 декабря 2011

Ближайший ответ к вашей текущей реализации - Г. Баха;вы должны посмотреть в его ответе, чтобы найти простое решение.

Немного подумать нестандартно ...

Ваша текущая реализация имеет потенциальную обратную сторону, что ваши массивы могут быть не синхронизированы по отношению киндексы, которые в конечном итоге будут иметь температуру для неправильных городов.Вы можете попробовать пользовательский тип, который инкапсулирует оба поля и имеет список из них.Что-то вроде ...

public class CityTemperatureInfo implements Comparable<CityTemperatureInfo>
{
    public string cityName;
    public double temperature;

    ...
}

Тогда ваше приложение будет использовать данные как List<CityTemperatureInfo>.Это гарантирует, что названия городов и температуры всегда будут в одном и том же месте в списке.И если вы сделаете класс сравнимым, вы можете реализовать метод int compareTo(CityTemperatureInfo other), который позволил бы вам просто сортировать вызовы в вашем списке. Обычно

хорошая идея хранить связанные данные вместе, чтобы избежать потенциальных проблем.данных становятся не синхронизированными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...