返回最高值java

时间:2012-02-20 18:10:49

标签: java

我正在尝试搜索ArrayList并找到最高的学生分数。这些值是随机输入的。我编写的代码如果值是有序的。但是当我尝试以随机顺序输入值时,循环总是返回输入的最后一个值! (这开始让我感到沮丧,因为我觉得它有用!)这可能很简单,但我又错过了这一点。

另一个注释.getName检索具有最高分的学生姓名。

以下是代码:

public String top()
{
    int highest = 0;
    int k;

    for (k = 0; k < people.size();k++)
    {
        if (people.get(k).getMark() > highest)
        {
            highest = k;
        }       
    }
    return people.get(highest).getName();
}

8 个答案:

答案 0 :(得分:5)

您将highest设置为具有最高分的学生的索引,而不是最高分。你可能想要同时保留两者:

public String top()
{
    int highestIndex = 0;
    int highestMark = people.get(0).getMark();

    for (int k = 1; k < people.size(); k++)
    {
        int mark = people.get(k).getMark();
        if (mark > highestMark)
        {
            highestMark = mark;
            highestIndex = k;
        }       
    }
    return people.get(highestIndex).getName();
}

请注意我做的其他两项更改:

  • 在循环之前声明k 是没有意义的;一般来说,给局部变量提供最小的范围是最整洁的

  • 我使用了集合中第一个人的初始值;现在这也适用于负面标记

另外,如果people为空,您应该考虑要发生什么。 (目前代码会抛出异常。)

答案 1 :(得分:2)

问题是索引最高,所以你的if条件应该是:

 if (people.get(k).getMark() > people.get(highest).getMark())

您还可以将最高值和索引存储在两个变量中:

    int highestVal = -1;
    int highestIdx = -1;

    for (int k = 0; k < people.size(); k++)
    {    
        if (people.get(k).getMark() > highestVal)
        {
            highestVal = people.get(k).getMark();
            highestIdx = k;
        }       
    }
    return people.get(highestIdx).getName();

答案 2 :(得分:1)

您正在比较索引和值。

尝试:

if (people.get(k).getMark() > people.get(highest).getMark())

答案 3 :(得分:1)

您对变量所代表的内容感到困惑。你将个人标记与'最高'进行比较,但是你将最高设置为等于该人的指数(k)。

所以你要将索引与标记进行比较......

答案 4 :(得分:1)

highest是索引,您将标记与标记索引进行比较

if (people.get(k).getMark() > highest)

答案 5 :(得分:0)

您应该与people.get(highest).getMark()

进行比较,而不是与循环中的最高值进行比较

答案 6 :(得分:0)

使用额外的变量来保存此人的索引。

public String top()
{
    int highest = 0;
    int k;
    int topPerson;

    for (k = 0; k < people.size();k++)
    {
        if (people.get(k).getMark() > highest)
        {
            highest = people.get(k).getMark() ;
            topPerson = k;
        }       
    }
    return people.get(topPerson).getName();
}

答案 7 :(得分:0)

尝试这个:)

  public String top()
    {
        int highest = 0;
        int k;

        for (k = 1; k < people.size();k++)
        {
            if (people.get(k).getMark() > people.get(highest).getMark())
            {
                highest = k;
            }       
        }
        return people.get(highest).getName();
    }