Java - For循环未通过数组

时间:2015-08-10 20:59:16

标签: java arrays

我有两个数组,一个是充满马拉松跑步者的String数组,另一个是整个马拉松运动员各自时间的整数数组。我正在努力输出最快的跑步者+他/她的时间以及第二快的跑步者+他/她的时间。到目前为止,我已经能够输出最快的跑步者和他的时间,但当我尝试输出第二快的跑步者+她的时间时,循环输出两个跑者的时间而不是一个。我附上了代码供参考:

此外,欢迎任何有关简化/改进代码的评论。

public class APCS {
  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
    };

    int timeIndex = 0;
    int secondTimeIndex = 0;
    for (int i = 0; i < times.length; i++) {
        if (times[i] > times[timeIndex]) {
            timeIndex = i;
            System.out.println(names[timeIndex] + " " + times[timeIndex]);
        }

        if (times[i] > times[secondTimeIndex]) {
            if (times[i] == times[timeIndex]) {
                continue;
            }
            secondTimeIndex = i;
            System.out.println(names[secondTimeIndex] + " " + times[secondTimeIndex]);
        }
    }

  }
}

这是我的输出:

Phil 445
Matt 402
Jane 412

2 个答案:

答案 0 :(得分:4)

您的System.out.println位置错误,现在正在报告所需索引中的更改,而不是最终结果。在for循环完成之后,应该将printlns称为

for (int i = 0; i < times.length; i++) {
    if (times[i] > times[timeIndex]) {
        timeIndex = i;
        //System.out.println(names[timeIndex] + " " + times[timeIndex]);
    }

    if (times[i] > times[secondTimeIndex]) {
        if (times[i] == times[timeIndex]) {
            continue;
        }
        secondTimeIndex = i;
        //System.out.println(names[secondTimeIndex] + " " + times[secondTimeIndex]);
    }
}
System.out.println("Fastest: " + names[timeIndex] + " " + times[timeIndex]);
System.out.println("Second: " + names[secondTimeIndex] + " " + times[secondTimeIndex]);

答案 1 :(得分:1)

因为您是用Java编写的,所以不应该使用并行数组。 Java专门设计为面向对象,因此我建议使用对象来表示马拉松运动员。

例如,您可以声明一个Runner类:

public class Runner implements Comparable<Runner> {
    private String name = null;
    private int time = 0;

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

    public String toString() {
        return name + " " + time;
    }

    public int compareTo(Runner r) {
        return (r.time - time);
    }
}

compareTo已实施,因此您可以对跑步者列表进行排序。

然后创建跑步者列表并使用Arrays类对其进行排序。

Runner[] runners = new Runner[16];
runners[0] = new Runner("Elena", 341); //and so on, creating all runners

Arrays.sort(runners); //runners will now be sorted according to times
System.out.println(runners[i].toString()); //first place
System.out.println(runners[1].toString()); //second place