2013-07-02 2 views
1

Итак, я создал простую программу, которая просит пользователя ввести 5 жанров, а затем забить их из 10. Я еще не добавил никакой проверки, но я не беспокоюсь об этом. Как вы можете видеть, у меня есть два массива: genres[] и score[]. Допустим, они входят:Java: как заказать массив в порядке убывания?

 [1] : Genre A | 3 
     [2] : Genre B | 6 
     [3] : Genre C | 2 
     [4] : Genre D | 10 
     [5] : Genre E | 8 

Результаты должны быть перечислены Жанровая D, E, B, A, C

Вот мой общий код:

import java.util.Scanner; 

class OrigClass { 
    public static void main (String[] args){ 
     Scanner ScanObj = new Scanner(System.in); 
     int count; 
     String[] genres; 
     genres = new String[5]; 
     int[] score; 
     score = new int[5]; 
     for (count = 0; count < 5;count++){ 
      System.out.println("Enter A Genre: "); 
      genres[count] = ScanObj.nextLine(); 
      System.out.println("How much do you like it? "); 
      score[count] = ScanObj.nextInt(); 
      ScanObj.nextLine(); 
     } 

     for (count = 0; count < 5; count++){ 
      System.out.println(count+1 + ") " + genres[count] + " " + score[count] + "/10"); 

     } 
     ScanObj.close(); 
    } 
} 

Есть умный способ сделать он в java, используя некоторые функции, или мне придется вручную сделать это, используя временные varibales, if statement и т. д. Я полагаю, что я мог бы также использовать алгоритм сортировки пузырьков, который было бы довольно легко реализовать. Поэтому я хочу отсортировать содержимое score[] в порядке убывания. Любые советы будут оценены.

+0

Почему массивы, а не «Карта»? С помощью «Карты» это было бы проще; проглотите 'Set >' в 'List' и используйте' Collections.sort() 'с помощью специального' Comparator'. – fge

ответ

0

Попробуйте метод Arrays.sort(Object[]);

Из javadoc:

рода

государственной статической силы сортировки (Object [] а) Сортирует указанный массив объектов в порядке возрастания, в соответствии с естественным порядком его элементов . Все элементы массива должны реализовывать интерфейс Comparable . Кроме того, все элементы массива должны быть взаимно сопоставимыми (то есть e1.compareTo (e2) не должен генерировать ClassCastException для любых элементов e1 и e2 в массиве). Этот тип гарантированно стабилен: элементы равные не будут переупорядочены как результат .

Алгоритм сортировки представляет собой модифицированное слияние (в которой слияние опущен, если наивысочайший элемент в нижнем подсписке меньше низкого элемента в высоком подсписке). Этот алгоритм обеспечивает гарантированную производительность n * log (n) .

5

Вместо того, чтобы иметь два параллельных массива, создайте массив объектов жанра/счета.

class OrigClass { 
    class ScoredGenre { 
     public String genre; 
     public int score; 
    } 
    ScoredGenre[] data = new ScoredGenre[5]; 
    . . . 
} 

Затем вы можете определить компаратор для сравнения объектов по количеству баллов и сортировки соответственно.

Arrays.sort(data, new Comparator<ScoredGenre>() { 
    public int compare(ScoredGenre a, ScoredGenre b) { 
     // Note that a and b are reversed to obtain a descending sort 
     return Integer.compare(b.score, a.score); 
    } 
}); 
0

я рекомендовал бы несколько изменений в коде следующим

шаг 1.

сделать боб с именем Жанр со следующей вещью

Строка имя INT забьет

Теперь создать в главном классе создать ArrayList

теперь добавить жанры как объекты

шаг 2.

теперь ваш боб реализовать сравнимый интерфейс и использовать метод сортировки по объектам из in.The main.class и и overide метод сопоставимого интерфейса

я думаю, это будет CompareTo так в THT метод сравнить оценки и будет сортироваться ...

+0

Вы буквально просто сказали почти то, что сказал Тед Хопп 10 минут назад, за исключением того, что его гораздо более четкое объяснение. –

+0

ya i din см. Его комментарий, я был занят, отвечая на вопрос. :-) – cafebabe1991

+0

Достаточно честно. Бывает... –

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