繁体   English   中英

返回最高的java值

[英]Returning the highest value 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();
}

你设置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会发生什么。 (当前代码将引发异常。)

问题是索引是最高的,因此您的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();

您正在比较索引和值。

尝试:

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

您混淆变量代表什么。 您正在将个人标记与“最高”进行比较,但随后将最高标记设置为等于该人的指数(k)。

因此,您正在将索引与标记进行比较...

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

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

而不是与循环中的最高点进行比较,您应该与people.get(highest).getMark()

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

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

试试这个:)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM