3

好的,所以我的问题是关于布尔返回。对于我的 Comp Sci 作业,我必须使用方法制作课程注册程序,其中之一是添加课程方法。基本上,您在目录中搜索课程,如果匹配,则将其添加到学生日程表并返回布尔值 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

需要在方法的末尾放置一个return-statement,即使您可能知道它永远不会到达(编译器不够聪明,无法知道这一点,这解释了错误)。

例如,即使这样也不会编译:

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

除非我们添加最后的return声明。你所拥有的是类似的。

于 2012-11-15T03:10:32.813 回答
2

您必须在所有代码路径中显式返回一个布尔值(true/false)。因为您的函数的返回类型是“布尔值”。

在您的情况下,您必须在最后一个循环之后添加一个 return 语句。

如果不想写很多“return xx”语句,可以把这个函数的返回类型改为“void”,在错误的情况下抛出异常。

于 2012-11-15T03:19:45.873 回答
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,以最合适的为准。您的所有返回都在条件范围内,因此可能无法执行,使您的函数没有返回语句。

于 2012-11-15T03:11:20.920 回答
1

无论您在哪里使用if语句,它都可能else还必须返回或流必须转到另一个返回。返回时缺少 ELSE。

于 2012-11-15T03:09:23.207 回答