使用相同的顺序对数组进行排序

时间:2013-12-30 19:59:10

标签: java arrays sorting

我正在制作一个程序来制作人员列表,有3个不同的时间标记(双倍) 为了做到这一点,我制作了4个阵列,一个字符串,以保存人名,以及3个双打,以保存2010年,2011年和2012年的3个标记。 在菜单中,我必须按降序对2012s标记上的列表进行排序。

喜欢这个

m12[0] = 12.1
m12[1] = 34.1
m12[2] = 23.1
m12[3] = 23.5

成:

m12[1] = 34.1
m12[3] = 23.5
m12[2] = 21.1
m12[0] = 12.1

我用基本算法做了,但现在我想知道是否有可能获得数组的实际顺序,([1],[3],[2],[0])并将其应用于其他数组我必须按照2012年标记的降序打印出来。

这就是我必须制作正常订单列表的代码:

            if(option==2){
            System.out.println("# , Name, 2010, 2011, 2012");
            for(i=0;i<dorsal.length-1;i++){
                if(dorsal[i]!=0){
                    System.out.println(dorsal[i]+"- "+nom[i]+", "+m10[i]+", "+m11[i]+", "+m12[i] );
                }
            }
            System.out.println("Press ENTER to return");
            intro.nextLine();
        }

很抱歉,如果我没有解释得非常好,我3个月前开始编程,我是新手。

// EDIT 我会在这里粘贴练习的主管:

这确实是程序需要做的。我被困在第3点。

目标是制定一个管理成员名单的计划 在跳远比赛中。可用的地方数量是15。 他们的数据将以与运动员相同的顺序介绍 注册。设计一个显示以下选项的程序:
1 - 注册参与者
2 - 列出所有参与者的数据
3 - 按标记
列出所有参与者的数据 4 - 退出
如果选择1,将引入其中一个参与者的数据:
名称,2012年最佳分数,2011年最佳分数,2010年最佳分数 如果选择2,我们必须列出所有参与者按背部排序的数据 号码(他们登记的顺序)
如果选择3,我们必须列出2012年之前订购的所有参与者数据 标记,从大到小。
处理完每个选项后,必须再次显示主菜单, 直到选择选项4,退出程序。

感谢。

1 个答案:

答案 0 :(得分:2)

定义一个类以包含每个人的数据,例如:

public class Person
{
    private String name;
    Private Map<Integer,Double> marks = new HashMap<Integer,Double>();
    public Person(String name) { this.name = name; }
    public void setMark(int year, double mark) {
        this.marks.put(year,mark); 
    }
    public void getMark(int year) {
        // return zero if there's no mark for the requested year
        return this.marks.containsKey(year) ? this.marks.get(year) : 0;
    }
}

然后写一个Comparator<Person>

public PersonComparatorOnMarkDescending implements Comparator<Person>
{
    private int yearToCompare;
    public PersonComparator(int yearToCompare) {
        this.yearToCompare = yearToCompare;
    }
    public compare(Person p1, Person p2)
    {
        Integer p1Mark = p1.getMark(yearToCompare);
        Integer p2Mark = p2.getMark(yearToCompare);
        return p2.compareTo(p1);
    }
}

然后,您可以定义List<Person>Person[]数组,并使用java.util中提供的排序方法。例如,使用

实例化比较器
Comparator<Person> comp = new PersonComparatorOnMarkDescending(2012);

此方法可让您对任何年份的标记进行排序。