我有2个非空方法的错误“缺少返回语句”:
方法1:
private boolean checkBox(int val, int i, int j) {
if(0<=i && i<=2 && 0<=j && j<=2){for(i=0;i<=2;i++){for(j=0;j<=2;j++){if(model[i][j]==val) return false;}}}else{return true;}
if(0<=i && i<=2 && 3<=j && j<=5){for(i=0;i<=2;i++){for(j=3;j<=5;j++){if(model[i][j]==val) return false;}}}else{return true;}
if(0<=i && i<=2 && 6<=j && j<=8){for(i=0;i<=2;i++){for(j=6;j<=8;j++){if(model[i][j]==val) return false;}}}else{return true;}
if(3<=i && i<=5 && 0<=j && j<=2){for(i=3;i<=5;i++){for(j=0;j<=2;j++){if(model[i][j]==val) return false;}}}else{return true;}
if(3<=i && i<=5 && 3<=j && j<=5){for(i=3;i<=5;i++){for(j=3;j<=5;j++){if(model[i][j]==val) return false;}}}else{return true;}
if(3<=i && i<=5 && 6<=j && j<=8){for(i=3;i<=5;i++){for(j=6;j<=8;j++){if(model[i][j]==val) return false;}}}else{return true;}
if(6<=i && i<=8 && 0<=j && j<=2){for(i=6;i<=8;i++){for(j=0;j<=2;j++){if(model[i][j]==val) return false;}}}else{return true;}
if(6<=i && i<=8 && 3<=j && j<=5){for(i=6;i<=8;i++){for(j=3;j<=5;j++){if(model[i][j]==val) return false;}}}else{return true;}
if(6<=i && i<=8 && 6<=j && j<=8){for(i=6;i<=8;i++){for(j=6;j<=8;j++){if(model[i][j]==val) return false;}}}else{return true;}
}
方法2:
private int solveMethod(int val, int i, int j){
if(i<SIZE-1){
if(j<=SIZE-1){
if(isEmpty(i, j)==true){
if(model[i][j]==0){val=1;}
if(tryValue(val, i, j)==false){
if(model[i][j]<SIZE) solveMethod(model[i][j]+1, i, j);
else{
bigloop:while(i>0){
while(j>0){
j--;
if(isEmpty(i, j)==true && model[i][j]<SIZE) break bigloop;
}
i--;
j=8;
}
solveMethod(model[i][j]+1, i, j);
}
}else{solveMethod(val, i, j+1);}
}else{solveMethod(val, i, j+1);}
}else{solveMethod(val, i+1, 0);}
}else{return i;}
如何思考(两种情况)以及如何纠正它。请教学;-) - 我是一个java新手。
提前致谢
答案 0 :(得分:0)
缺少退货声明
这意味着程序中至少存在一个不返回值的控制流。
对于方法1,我正在解释:
if(0<=i && i<=2 && 0<=j && j<=2)
{
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(model[i][j]==val) // if this is false in all the iterations
// method won't be returning any value.
// hence the error.
return false;
}
}
}
else
{
return true;
}
现在,对于方法2,您可以看起来类似。
答案 1 :(得分:0)
在Java中,当您声明具有返回类型的方法时,编译器会确保您在任何情况下都返回与此类型兼容的值。
编译器无法猜测只在有界情况下调用您的方法,因此假设条件可能不是真或假,则必须在检查中考虑是否在方法中返回值。 />
例如,在checkBox()
方法中,您有多个独立的if else if块。
但是,如果您从未输入任何if
,则不会返回值。
在solveMethod()
方法中,您还有一些不返回值的情况。
答案 2 :(得分:0)
在整个方法的开头设置一个变量,其类型与方法构造函数中定义的类型相同。
private boolean checkBox(int val, int i, int j) {
boolean return_val = false;
然后......你只是在最后}
....
if(0<=i && i<=2 && 0<=j && j<=2){for(i=0;i<=2;i++){for(j=0;j<=2;j++){if(model[i][j]==val) return false;}}}else{return true;}
return return_val;
}
您也可以在第一种方法结束时执行return false;
,因为它是boolean
对于第二种方法,它是一个整数,也许return -1
或return 0
可以工作?如果必须,在发生一个error checking
条件的情况下,对调用第二种方法执行某些return 0
的任何事情实现条件。
您始终必须返回与此处指定的类型匹配的类型化对象:
private int solveMethod(int val, int i, int j){
具体地,
private int solveMethod
其中int
指定返回类型