好的,所以我的问题是关于布尔返回。对于我的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;
}
}
为什么不识别布尔返回值?是因为我将它们放在一个循环中吗?
答案 0 :(得分:3)
你需要在方法的最后放置一个return
语句,即使你可能知道它永远不会被触及(编译器不够聪明,不知道,这解释了错误。)
例如,即使这样不编译:
public static boolean foo() {
if (true)
return true;
}
除非我们添加最终的return
语句。你所拥有的是类似的。
答案 1 :(得分:2)
将返回值放在循环中没有任何问题,但是,编译器不能保证此方法将返回值,从而引发错误。在方法的最后,您需要返回true或false,以最合适的为准。您的所有返回都在条件限制内,因此可能无法执行,而您的函数没有返回语句。
答案 2 :(得分:2)
你必须在ALL代码路径中显式返回一个布尔值(true / false)。因为你的函数的返回类型是“boolean”。
在您的情况下,您必须在最后一个循环之后添加一个return语句。
如果您不想写入许多“return xx”语句,可以将此函数的返回类型更改为“void”。并在错误情况下抛出异常。
答案 3 :(得分: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;
}
答案 4 :(得分:1)
无论你使用if
语句,它的可能else
也必须返回,或者流必须转到另一个return.ELSE返回时缺少。