arraylist不打印正确的数据

时间:2013-10-03 04:16:23

标签: java arraylist

尝试返回最高得分,但它返回错误的分数...不确定问题是什么,如果我将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可能没有被激活......

5 个答案:

答案 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