2010-04-18 80 views
1

我有一个未排序的对象数组。根据对象内部的最高值,我需要知道如何按降序对我的数组进行排序。Java:按降序排序未排序的数组

我需要使用for循环来做到这一点,而不是简单的方法。

我已经做到了这一点,但它似乎有一个问题:

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:得到一本关于排序算法的书。 – 2010-04-18 18:31:58

+0

@Bader - 什么是“简单的方法”?如果这是家庭作业,您应该这样标记它。 – 2010-04-18 18:34:10

+0

Duplicates:http://stackoverflow.com/questions/1694751/java-array-sort-descending http://stackoverflow.com/questions/1946668/sorting-using-comparator-descending-order-user-defined-classes – 2010-04-18 18:39:57

回答

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()来进行比较。 – 2010-04-18 18:32:12

+0

uff,是的,我的不好 但可能实现Comparable可以保存它 – Xorty 2010-04-18 18:34:22

+0

是的,这基本上是我的建议。 – 2010-04-18 18:35:10

2

我建议看Wikipedia文章sorting algorithms。你的代码失败了,因为你只比较每个元素与下一个元素 - 但这不是一个排序算法,因为要正确放置在第一个位置,元素需要大于全部其他元素,而不仅仅是下一个。

此外,使用小写的类名非常反对Java编码标准。

+1

和方法: getGpa() - 很好的Java; GetGpa() - C#像 – Xorty 2010-04-18 18:40:15

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

有一个问题来当我的 “主” 显示java.lang.NullPointerException \t在sun.misc.FloatingDecimal.readJavaFormatString(来源不明) \t是java把这段代码 异常的线程。 lang.Double.parseDouble(Unknown Source) \t at main_function.main(main_function.java:35) – Bader 2010-04-18 19:52:48

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 – 2010-04-18 23:05:03

+0

此处还有一个演示不同排序算法的小程序:http://www.cs.oswego.edu/~mohammad /classes/csc241/samples/sort/Sort2-E.html – 2010-04-18 23:07:50