Java代码逻辑

时间:2018-02-04 18:09:20

标签: java

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]);
            }
        }
    }
}

3 个答案:

答案 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]);
}