两种不同方法的java错误:缺少return语句

时间:2017-01-05 11:59:22

标签: java

我有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新手。

提前致谢

3 个答案:

答案 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 -1return 0可以工作?如果必须,在发生一个error checking条件的情况下,对调用第二种方法执行某些return 0的任何事情实现条件。

您始终必须返回与此处指定的类型匹配的类型化对象:

private int solveMethod(int val, int i, int j){

具体地,

private int solveMethod

其中int指定返回类型