簡體   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