概述
好的,所以我的问题是关于布尔值的回报。 对于我的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;
}
}
为什么不能识别布尔返回值? 是因为我将它们放在一个循环中吗?
该错误是否类似于"并非所有代码路径都返回值"?
除了对遗漏的收益发表评论外,我还注意到您引用的代码并未根据其逻辑缩进。 那可能是复制代码的产物。 我确实建议使用可以格式化Java的编辑器,并定期重新格式化以使所有内容在逻辑上保持一致。
即使您可能永远不会到达它,也需要在方法的末尾放置一个return语句(编译器不够聪明,不足以说明错误)。
例如,即使这样也不会编译:
public static boolean foo() {
if (true)
return true;
}
除非我们添加最终的return语句。您拥有的是类似的。
当我这样做时,它只是跳到最后并返回该值!
@PavelVaysberg然后您的for循环一定存在问题(即那不是将return语句放在末尾的结果)。
@ A.R.S。从我的评论中找出答案(摇摇头)
@evanmcdonnal我希望你讽刺:P
我认为最后一个循环有问题。如果从不满足返回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;
}
是的,那就是我的意思。
然后,您应该添加" return true";最后,目标是在此之前检测出应返回false的所有情况。
您必须在ALL代码路径中显式返回boolean(true / false)。因为函数的返回类型为" boolean"。
对于您的情况,您必须在最后一个循环之后添加return语句。
如果您不想写很多" return xx"语句,则可以将此函数的返回类型更改为" void"。在错误情况下抛出Exception。
将返回值放入循环中没有任何问题,但是,编译器无法保证此方法将返回值并因此引发错误。在方法的最后,您需要返回true或false,以最合适的为准。您的所有返回都在条件内,因此可能无法执行而没有return语句的函数。
如果在方法的末尾添加return true或false,则该方法仅返回该值并跳过我的所有循环...也许它没有进入循环,请检查错误。
@PavelVaysberg好吧,这是另一个问题。检查完该代码后,我可以保证您不会由于"并非所有代码路径都返回一个值"的错误而进行编译。在该方法的末尾添加return语句不会影响该方法之前的代码的执行。
那我的问题是什么?我不明白为什么该方法不会执行我的for循环...
@PavelVaysberg您的所有循环控制变量(即myCourses.Length)是否都大于0?您的代码不是很容易阅读,但是如果启动程序时您拥有0门课程并且所有这些值均为0,那么循环将永远不会执行,我不会感到惊讶。另外,据我所知,else continue;行均无任何作用。如果您的if条件不满足并且您没有其他需要执行的操作,则没有理由拥有else。
在使用if语句的任何地方,它可能的else也必须返回,或者流必须转到另一个return。ELSE缺少return。
最后
以上就是鲤鱼画笔为你收集整理的java返回一个布尔值_关于java:返回布尔值的方法的全部内容,希望文章能够帮你解决java返回一个布尔值_关于java:返回布尔值的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复