【问题标题】:Java: Sorting unsorted array in descending orderJava:按降序对未排序的数组进行排序
【发布时间】:2011-02-09 10:30:27
【问题描述】:

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

我需要使用 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];
    }
}

我应该如何使用 for 循环?

【问题讨论】:

标签: java


【解决方案1】:
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];
        }
    }
}

【讨论】:

【解决方案2】:
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;
        }
    }
}

【讨论】:

  • 当我将此代码异常放入线程“main”java.lang.NullPointerException at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Double.parseDouble(未知来源)在 main_function.main(main_function.java:35)
【解决方案3】:
public class Student implements Comparable { ... }
    Arrays.sort(students);
    List<Object> list = Arrays.asList(students);
    Collections.reverse(list);
    students = list.toArray();

【讨论】:

  • 这行不通,因为您需要在每个学生对象上调用 GetGpa() 来进行比较。
  • uff,是的,我的错,但也许实现 Comparable 可以保存它
  • 是的,这基本上是我的建议。
  • 你的手指比我的快一点 :) 你比我早几秒回复,但是是的,你是对的
【解决方案4】:

我建议查看sorting algorithms 的维基百科文章。您的代码失败,因为您仅将每个元素与下一个元素进行比较 - 但这根本不是排序算法,因为为了正确放置在第一个位置,元素需要大于 all其他元素,而不仅仅是下一个。

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

【讨论】:

  • 还有方法:getGpa() - 不错的 Java; GetGpa() - C# 类似
【解决方案5】:

这应该可以帮助您入门。您需要创建自己的Comparator,然后调用Collections.Sort()

Collections.sort(List<T> list, Comparator<? super T> c)

【讨论】:

    猜你喜欢
    • 2014-02-16
    • 2013-09-20
    • 1970-01-01
    • 2021-12-28
    • 2011-08-12
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2015-08-30
    相关资源
    最近更新 更多