我正在编写一个程序来列出人员列表,其中有 3 个不同的时间标记(双倍) 为此,我创建了 4 个数组,一个字符串用于保存人名,三个 double 组用于保存 2010 年、2011 年和 2012 年的 3 个标记。 在菜单中,我必须实现一个选项来按 2012 年标记对列表进行降序排序。
像这样
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 点。
目标是开发一个程序来管理成员列表
在跳远比赛中。可用名额为15个。
他们的数据将按照运动员的顺序介绍
注册。设计一个显示以下选项的程序:
1 – 注册参与者
2 – 列出所有参与者的数据
3 – 按标记列出所有参与者的数据
4 – 退出
如果选择1,将介绍其中一位参与者的数据:
姓名、2012年最佳成绩、2011年最佳成绩、2010年最佳成绩。
如果选择2,我们必须列出所有参与者的数据,按背排序
编号(他们注册的顺序)
如果选择3,我们必须列出2012年之前排序的所有参与者数据
标记,从大到小。
处理完每个选项后,必须再次显示主菜单,
直到选择选项4,退出程序。
谢谢。
最佳答案
定义一个类来包含每个人的数据,例如:
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);
这种方法可以让您根据任何年份的标记对集合进行排序。
关于java - 以相同的顺序对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20846571/