【问题标题】:Sorting arrays with the same order以相同的顺序对数组进行排序
【发布时间】:2013-12-31 04:23:04
【问题描述】:

我正在制作一个程序来制作人员列表,其中包含 3 个不同的时间标记(双倍) 为此,我制作了 4 个数组,一个字符串来保存人名,并制作了 3 个 Doubles 来保存 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 个月前开始编程的,我是新手。

//编辑 我将在此处粘贴练习的开头:

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

目标是开发一个程序来管理成员列表 在跳远比赛中。可用名额为 15 个。 他们的数据将以与运动员相同的顺序引入 注册。设计一个显示以下选项的程序:
1 – 注册参与者
2 – 列出所有参与者的数据
3 – 按标记列出所有参与者的数据
4 – 退出
如果选择1,将介绍其中一位参与者的数据:
姓名、2012年最佳成绩、2011年最佳成绩、2010年最佳成绩。
如果选择 2,我们必须列出所有参与者的数据,按背部排序 编号(他们注册的顺序)
如果选择 3,我们必须列出 2012 年之前排序的所有参与者的数据 标记,从大到小。
处理完每个选项后,必须再次显示主菜单, 直到选择选项4,退出程序。

谢谢。

【问题讨论】:

  • 您绝对应该将您的 4 个数组替换为 1 个包含自定义 Person 对象的数组。
  • 如何使用 Arrays.sort(double[] array) 然后从后面访问元素 s。
  • 如果您打算使用普通数组而不是 OOP 方式执行此操作:那么我可以看到 the dooms day is very near to us。如果您要说有人强迫您这样做(因为大多数 OP 在提出 OOP 建议后都会做出回应)并且您正在遵守他的要求,那么我可以看到:the dooms day is even more nearer

标签: java arrays sorting


【解决方案1】:

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

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&lt;Person&gt;

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&lt;Person&gt;Person[] 数组并使用java.util 中提供的排序方法。实例化比较器,例如:

Comparator<Person> comp = new PersonComparatorOnMarkDescending(2012);

这种方法可以让您根据任何年份的标记对集合进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多