0

试图返回最高分,但它返回了错误的分数......不确定问题是什么,如果我将数组列表中的第一个对象设置为最高分,然后将其与之进行比较?

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();
}

//试过这个,它一直说newStu可能没有被初始化......

4

5 回答 5

2

你的情况似乎颠倒了:

if (highest>newStu.getQuizScore()){

将其更改为:

if (highest<newStu.getQuizScore()){
于 2013-10-03T04:19:03.830 回答
2

有几种方法可以解决这个问题。

第一种也是最直接的方法是修复逻辑错误: 返回此时找到的最大元素。 不等式也反过来了。

将其更改为:

for (int i = 1; i < collegeList.size(); i++) {
    newStu = collegeList.get(i);

    if (highest < newStu.getQuizScore()){
        highest = newStu.getQuizScore();
    }

}
return newStu.toString();

请注意,不等式已经翻转以反映,如果highest实际上小于某个学生的测验分数,那么我们找到了一个新的最高分数。

找到一个新的最高点并不能保证我们已经找到最高点。 我们必须继续迭代,直到我们确定为止。

另一种方法是使用 a SortedSet<Student>,并具有Studentimplement Comparable,这样当将值插入集合时,它们会自动按等级排序。

该声明如下所示:

@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()调用来访问。

于 2013-10-03T04:34:56.607 回答
1

首先是从0开始for循环的索引。然后你应该把你的return放在循环之后,因为当达到return时循环会自动停止。

于 2013-10-03T04:23:39.700 回答
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();
}
于 2013-10-03T04:28:07.643 回答
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
于 2013-10-03T04:20:11.360 回答