Java 使用Math.max运算符查找数组中的前两个数字

Java 使用Math.max运算符查找数组中的前两个数字,java,arrays,math,max,operator-keyword,Java,Arrays,Math,Max,Operator Keyword,我正在做一个java项目,我必须找到马拉松时间的前两个值。我已经创建了数组,但我需要找到数组中的前两个数字。我可以在Java中使用Math.max操作符吗。以下是代码btw: class Marathon { public static void main (String[] arguments) { String[] names = { "Elena", "Thomas", "Hamilton", "Suzie", "Phil",

我正在做一个java项目,我必须找到马拉松时间的前两个值。我已经创建了数组,但我需要找到数组中的前两个数字。我可以在Java中使用Math.max操作符吗。以下是代码btw:

class Marathon {
    public static void main (String[] arguments) {
        String[] names = { "Elena", "Thomas", "Hamilton", "Suzie", "Phil", 
                           "Matt", "Alex", "Emma", "John", "James", "Jane", 
                           "Emily", "Daniel", "Neda", "Aaron", "Kate" };

        int[] times = { 341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 
                        393, 299, 343, 317, 265 };

        for (int i = 0; i < names.length; i++) {
            System.out.println(names[i] + ": " + times[i]);
        }
    }
}
职业马拉松{
公共静态void main(字符串[]参数){
String[]name={“Elena”、“Thomas”、“Hamilton”、“Suzie”、“Phil”,
“马特”、“亚历克斯”、“艾玛”、“约翰”、“詹姆斯”、“简”,
“艾米丽”、“丹尼尔”、“内达”、“艾伦”、“凯特”};
int[]次={341,273,278,329,445,402,388,275,243,334,412,
393, 299, 343, 317, 265 };
for(int i=0;i
最好为结果创建一个包含名称和时间的类。让该类实现Compariable,然后只使用
Collections.sort()
并获取前两个元素

大概是这样的:

class RaceResult implements Comparable 
{
    final int time;
    final String name;

    RaceResult(String name, int time)
    {
        this.time = time;
        this.name = name;
    }

    @Override
    public int compareTo(Object o)
    {
        return new Integer(time).compareTo((Integer)((RaceResult)o).time);
    }       

    @Override
    public String toString()
    {
        return name + "(" + time + ")";
    }
}
马拉松课:

class Marathon {
    List<RaceResult> results = Arrays.asList(new RaceResult("Elena", 341),
                                             new RaceResult("Thomas", 273),
                                             new RaceResult("Hamilton", 278));

    public static void main(String[] args)
    {
        Collections.sort(results);
        System.out.println("Winner: " + results.get(0));
        System.out.println("2nd place: " + results.get(1));
    }
}
职业马拉松{
列表结果=Arrays.asList(新的RaceResult(“Elena”,341),
新比赛结果(“托马斯”,273),
新的结果(“汉密尔顿”,278));
公共静态void main(字符串[]args)
{
收集。排序(结果);
System.out.println(“获胜者:+results.get(0));
System.out.println(“第二名:+results.get(1));
}
}

一种无需创建特殊类即可完成此操作的方法:在for循环中遍历数组,通过将int数组的每个元素与“max”变量进行比较来找到最大值,然后在找到最大值后,保存它,从数组中删除该项,然后再次扫描以查找最大值。。。。这一次将是第二个最大的数字,因为第一个最大的数字已经被删除。

您可以通过数组O(n)循环

编辑:把问题读错。。。对于2 Math.max,我建议只使用if测试

int[] times = {
        341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299,
        343, 317, 265
    };

Integer max1 = null, max2 = null;
for(int i=0;i<times.length;i++) {
    if(max2 == null || max1 == null || max1 <= times[i]) {
        max2 = max;
        max1 = times[i];
    }
}
System.out.println("max1: " + max1 + " max2: " + max2);
int[]次={
341, 273, 278, 329, 445, 402, 388, 275, 243, 334, 412, 393, 299,
343, 317, 265
};
整数max1=null,max2=null;

对于(int i=0;iYes,你可以使用Math.max。你试过吗?认真的!!!这可以通过简单的搜索得到答案。请使用google和Duplicate。投票关闭