【问题标题】:Java array loop method returns last value in arrayJava数组循环方法返回数组中的最后一个值
【发布时间】:2018-05-17 00:39:59
【问题描述】:

我正在编写一个程序来确定谁在马拉松比赛中跑得最快,这是从一组时间和一个相应的名称中得出的。为了使它们匹配,我返回最低时间的索引而不是索引的值。当我返回索引的值而不是索引时,它返回正确的名称和时间,但是,当返回索引时,它返回两个数组中的最后一个值。

package Lec3;

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

        int key = firstPlace(times, names);

        System.out.println("In first place is " + names[key] + " with a time of " + times[key] + " minutes!");

    }

    public static int firstPlace(int[] time, String[] names)
    {
        int i;
        int bestTime = 1000;
        int firstValue = 0;

        for(i = 0; i < time.length; i++)
        {
            if(time[i] < bestTime)
            {
                firstValue = i; 
            }
        }
        return firstValue;
    }
}

【问题讨论】:

  • 更好的解决方案 -> 使用哈希

标签: java arrays loops for-loop


【解决方案1】:
for(i = 0; i < time.length; i++)
{
    if(time[i] < bestTime)
    {
        firstValue = i; 
    }
}

在此循环中,您不会更新 bestTime,因此所有时间都会与 1000 的初始值进行比较。他们都变小了,最后一场胜利。

【讨论】:

  • 编辑:我明白你现在的意思,因为我不更新 bestTime,只是将它与初始值进行比较。感谢您的帮助!
【解决方案2】:

您在 main 中有一个循环,您可以在其中迭代 names 以显示所有名称和时间。您可以在该循环中找到最低的key。喜欢,

int key = 0;
for (int i = 0; i < names.length; i++) {
    System.out.println(names[i] + ": " + times[i]);
    if (times[i] < times[key]) {
        key = i;
    }
}
System.out.println("In first place is " + names[key] + " with a time of " + times[key] + " minutes!");

或者,在你目前的方法中,改变

if(time[i] < bestTime)

if (time[i] < time[firstValue])

并消除bestTime

【讨论】:

  • @nox 拿出铅笔和纸,写下每次循环迭代发生的事情:玩电脑。
猜你喜欢
  • 1970-01-01
  • 2019-11-13
  • 2020-06-04
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 1970-01-01
  • 2013-03-11
相关资源
最近更新 更多