[英]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.