尝试返回最高得分,但它返回错误的分数...不确定问题是什么,如果我将arraylist中的第一个对象设置为最高分,然后将其与之比较?
public String findHighest () {
Student newStu;
Student s;
int highest;
s=collegeList.get(0);
highest=s.getQuizScore();
for (int i=1; i<collegeList.size() ;i++ ) {
newStu=collegeList.get(i);
if (highest>newStu.getQuizScore()){
highest=newStu.getQuizScore();
return newStu.toString();
}
}
}
public String findHighest () {
Student newStu;
Student s;
int highest;
s=collegeList.get(0);
highest=s.getQuizScore();
for (int i = 1; i < collegeList.size(); i++) {
newStu = collegeList.get(i);
if (highest < newStu.getQuizScore()){
highest = newStu.getQuizScore();
}
}
return newStu.toString();
}
//尝试了这个并且它一直说新的Stu可能没有被激活......
答案 0 :(得分:2)
您的病情似乎已逆转:
if (highest>newStu.getQuizScore()){
将其更改为:
if (highest<newStu.getQuizScore()){
答案 1 :(得分:2)
有几种方法。
第一个也是最直接的方法是修复逻辑错误:返回这个时刻的最大元素。不平等也会逆转。
将其更改为:
for (int i = 1; i < collegeList.size(); i++) {
newStu = collegeList.get(i);
if (highest < newStu.getQuizScore()){
highest = newStu.getQuizScore();
}
}
return newStu.toString();
请注意,不平等已经反映出,如果highest
实际上小于某个学生的测验分数,那么我们发现了一个新的最高分。
找到新的最高值并不能保证我们发现 最高。我们必须继续迭代直到我们确定。
另一种方法是使用SortedSet<Student>
,并Student
实现Comparable
,这样当一个值插入集合时,它们会按照等级自动排序。< / p>
该声明如下:
@Override
public int compareTo(Student other) {
if(other == null) {
return 1;
}
if(quizScore == other.getQuizScore()) {
return 0;
}
if(quizScore < other.getQuizScore()) {
return -1;
} else {
return 1;
}
}
...然后,你如此构建你的TreeSet<Student>
:
SortedSet<Student> orderedStudents = new TreeSet<>();
...您可以像放置列表一样将元素放入此集合中。您最大的元素现在位于集合的结束,可以通过简单的last()
调用进行访问。
答案 2 :(得分:1)
首先是将for循环的索引设置为0.然后你应该在循环之后返回,因为循环将在到达返回时自动停止。
答案 3 :(得分:1)
您将返回迭代中的第一个最高分。
if (highest>newStu.getQuizScore()){ //here the comparison problem
highest=newStu.getQuizScore();
return newStu.toString(); // here returning the first highest score in the iteration.
}
尝试以下代码
public String findHighest () {
Student newStu;
Student s;
int highest;
s=collegeList.get(0);
highest=s.getQuizScore();
for (int i=1; i<collegeList.size() ;i++ ) {
f (highest<collegeList.get(i)){
highest=newStu.getQuizScore();
newStu=collegeList.get(i)
}
}
return newStu.toString();
}
答案 4 :(得分:0)
您的for
循环应该是这样的:
for (int i=1; i<collegeList.size() ;i++ ) {
newStu=collegeList.get(i);
if (highest<newStu.getQuizScore()){
highest=newStu.getQuizScore();
}
}
return newStu.toString(); //return the value after for loop