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

これにはいくつかのアプローチがあります。

最初の最も直接的なアプローチは、論理エラーを修正する ことです。現時点で見つかった最大の要素が返されます。 不等号も逆です。

これを次のように変更します。

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ことです。これにより、値をセットに挿入すると、値が自動的にグレード順に並べられます。

その宣言は次のようになります。

@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 に答える
2

あなたの状態は逆転しているようです:

if (highest>newStu.getQuizScore()){

次のように変更します。

if (highest<newStu.getQuizScore()){
于 2013-10-03T04:19:03.830 に答える
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 に答える
1

最初に、for ループのインデックスを 0 から開始します。次に、return に到達するとループが自動的に停止するため、return をループの後に配置する必要があります。

于 2013-10-03T04:23:39.700 に答える
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 に答える