我有两个数组,一个是充满马拉松跑步者的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
答案 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