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