2010-04-18 3 views
1

У меня есть несортированный массив объектов. Мне нужно знать, как я могу сортировать свой массив в порядке убывания, в соответствии с самым высоким значением внутри объектов.Java: Сортировка несортированного массива в порядке убывания

Мне нужно сделать это, используя для петель, а не простой способ.

я это сделал, но, кажется, есть проблема:

student[] temp=new student[s.length]; 

for (int i=0;i<s.length;i++) 
{ 
    if (s[i].GetGpa() > s[i + 1].GetGpa()) 
    { 
     temp[i] = s[i]; 
    } 
} 

Как я должен сделать это с помощью для петель?

+0

Похоже, что это домашнее задание - Bader нужно сделать это трудный путь, без встроенных сортов. @Bader: получите книгу по алгоритмам сортировки. –

+0

@Bader - Что такое «простой способ» ?. Если это домашняя работа, вы должны пометить ее как таковую. –

+0

Дубликаты: http://stackoverflow.com/questions/1694751/java-array-sort-descending http://stackoverflow.com/questions/1946668/sorting-using-comparator-descending-order-user-defined-classes –

ответ

3

Это должно вас начать. Вам нужно будет создать свой собственный Comparator, а затем позвонить Collections.Sort().

Collections.sort(List<T> list, Comparator<? super T> c) 
1
public class Student implements Comparable { ... } 
    Arrays.sort(students); 
    List<Object> list = Arrays.asList(students); 
    Collections.reverse(list); 
    students = list.toArray(); 
+0

Это не сработает, потому что вам нужно вызвать GetGpa() для каждого объекта-ученика для сравнения. –

+0

uff, да мой плохой , но, возможно, реализует Comparable, может его сохранить – Xorty

+0

Да, это в основном то, что я предложил. –

2

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

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

+1

а также методы: getGpa() - nice Java; GetGpa() - C#, как – Xorty

1
for (int j=0;j<s.length;j++) { 
    for (int i=0;i<s.length - 1 - j;i++) 
    { 
     if (s[i].GetGpa() > s[i + 1].GetGpa()) 
     { 
      student temp = s[i]; 
      s[i] = s[i+1]; 
      s[i+1] = temp; 
     } 
    } 
} 
+0

есть проблема, когда я пришел поставить этот код Exception в потоке "главный" java.lang.NullPointerException \t на sun.misc.FloatingDecimal.readJavaFormatString (Unknown Source) \t на Java. lang.Double.parseDouble (Неизвестный источник) \t at main_function.main (main_function.java:35) – Bader

0
for(int i=0;i<s.length;i++) 
{ 
    for(int j=i+1;j<s.length;j++) 
    { 
     if(s[j].GetGpa()>s[i].GetGpa()) 
     { 
      student[] temp=new student[5]; 
      temp[j]=s[j]; 
      s[j]=s[i]; 
      s[i]=temp[j]; 
     } 
    } 
} 
+1

Обратите внимание, что 'new student [5]' создаст фиксированный массив. Попытка использовать индекс за пределами 4 (0-4 - 5 значений) вызовет «Исключение». http://java.sun.com/docs/books/tutorial/java/nutsandbolts/arrays.html –

+0

Также представлен апплет, демонстрирующий различные алгоритмы сортировки: http://www.cs.oswego.edu/~mohammad /classes/csc241/samples/sort/Sort2-E.html –

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