3

さて、私の質問はブール値のリターンに関するものです。私のCompSciの宿題では、メソッドを使用してコース登録プログラムを作成する必要があります。そのうちの1つは、コースの追加メソッドです。基本的に、カタログでクラスを検索し、一致する場合はそれを生徒のスケジュールに追加して、ブール値trueを返します。私はこれをしました、しかし何らかの理由でそれは私にエラーを与えています。コードは次のとおりです。

public static boolean addCourse(
    Course[] catalog,
    Course[] mySchedule,
    int myNumCourses,
    int dept,
    int courseNum)
{
    int j;
    int i;
    int k;
    int deptCat;
    int courseNumCat;
    Course courseAdd = null;
    char checkDay;
    int checkTime;



    if (mySchedule.length == myNumCourses) {
        return false;
    }
        for (i = 0 ; i < catalog.length ; i++) {
            Course course = catalog[i];
            deptCat = course.getDepartment();
            courseNumCat = course.getCourseNumber();
            if (deptCat == dept && courseNumCat == courseNum) {
                courseAdd = catalog[i];
                break;
            }
            else continue; }
        for (j = 0 ; j < myNumCourses ; j++) {
            if (mySchedule[j] == null) {
                mySchedule[j] = courseAdd;
                return true;
                }
                else continue;
                }

    for (k = 0 ; k < mySchedule.length ; k++) {
        Course course = mySchedule[k];
        if (course != null) {
            checkDay = course.getDay();
            checkTime = course.getPeriod();
            if (checkDay == courseAdd.getDay() && checkTime == courseAdd.getPeriod()) {
                return false;
            }
        }
        else continue;

    }







}

ブール値の戻り値を認識しないのはなぜですか?ループの中に入れたからですか?

4

5 に答える 5

3

メソッドの最後に -statementを配置する必要がありますreturn。これは、決して到達しないことがわかっている場合でもです (コンパイラーはそれを認識できるほど賢くないため、エラーが説明されます)。

たとえば、これでもコンパイルされません。

public static boolean foo() {
    if (true)
        return true;
}

最終的なreturn声明を追加しない限り。あなたが持っているものは類似しています。

于 2012-11-15T03:10:32.813 に答える
2

最後のループに問題があると思います。falseを返す条件が満たされない場合は、何も返さずにスケジュールの最後に到達するまで続行されます。メソッドの最後にリターンを追加すると、このループが失敗する可能性があります。'return false'が実行されない場合、ループの後にtrueを返すことを意味しましたか?

    for (k = 0; k < mySchedule.length; k++) {
      Course course = mySchedule[k];
      if (course != null) {
        checkDay = course.getDay();
        checkTime = course.getPeriod();
        if (checkDay == courseAdd.getDay()
            && checkTime == courseAdd.getPeriod()) {
          return false;
        }
      } else
        continue;
    }
于 2012-11-15T03:49:19.917 に答える
2

戻り値をループに入れても問題はありませんが、コンパイラは、このメソッドが値を返すことを保証しないため、エラーが発生します。メソッドの最後で、true または false のうち、最も適切な方を返す必要があります。戻り値はすべて条件内にあるため、return ステートメントがないと関数が実行されず、実行に失敗する可能性があります。

于 2012-11-15T03:11:20.920 に答える
2

関数の戻り値の型が「ブール値」であるため、すべてのコード パスでブール値 (true/false) を明示的に返す必要があります。

あなたの場合、最後のループの後に return ステートメントを追加する必要があります。

「return xx」ステートメントを多く書きたくない場合は、この関数の戻り値の型を「void」に変更して、false の場合に Exception をスローすることができます。

于 2012-11-15T03:19:45.873 に答える
1

ifステートメントを使用している場合はどこelseでも、リターンする必要があるか、フローが別の return.else に移動する必要があります。リターンには ELSE がありません。

于 2012-11-15T03:09:23.207 に答える