我正在尝试搜索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();
}
答案 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();
}