Java新手,并使用旧的麻省理工学院课程自学。这是我的代码。它回归托马斯:273 约翰:243 任何人都能解释为什么它会返回两个值而不仅仅是最快的跑步者吗?
public class Marathon {
public static void main(String args[]) {
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 smallest = times[0]; // sets smallest to 341
for (int x = 0; x < times.length; x++) {
if (times[x] < smallest) {
smallest = times[x];
System.out.println(names[x] + ": " + times[x]);
}
}
}
}
答案 0 :(得分:4)
因为每次找到较小的值时都会打印:
if (times[x] < smallest) {
smallest = times[x];
System.out.println(names[x] + ": " + times[x]); // print always
}
如果您只需要以最快的速度打印,则需要将逻辑分开才能找到最快并打印结果。
int smallest = times[0]; // sets smallest to 341
for (int x = 0; x < times.length; x++) {
if (times[x] < smallest) {
smallest = times[x];
}
}
System.out.println(names[smallest] + ": " + times[smallest]);
答案 1 :(得分:0)
您的代码存在的问题是,每次发现小于“最小”的内容时都会输出。
您使用times数组中的第一个值初始化最小值,即341.然后在循环的第一步,它将从341更新为243,因此您将打印Thomas。
相反,你必须在循环后打印。
答案 2 :(得分:0)
从你完成它的方式来看,你打印if条件发生时的每一次出现,对于273和一对243,它将是两次。
使用此额外变量,您将保存找到最小值的索引,然后从中访问它。有很多方法可以做到这一点。
public static void main(String[] args) {
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 smallest = times[0]; // sets smallest to 341
int index = 0;
for (int x = 0; x < times.length; x++) {
if (times[x] < smallest) {
smallest = times[x];
index = x;
}
}
System.out.println(names[index] + ": " + times[index]);
}