2017-01-05 5 views
-2

私は2つのnonvoid方法については "return文を欠けている" エラーを持っている:Javaエラー:不足しているreturn文

方法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

方法1あなたのforループは返さずに完了するかもしれないので、メソッドはreturn文をヒットします。 – khelwood

+0

@khelwoodそれはループではなく、それは条件です:最も外側の条件が満たされているという保証はありません。 –

+0

方法2:あなたのメソッドは、最後のelse節を満たしていればreturn文にヒットするだけです。 – khelwood

答えて

0

不足しているreturn文で

おかげで

これは、プログラム内の少なくとも1つの制御フローは、それが値を返しませんが存在することを意味します。方法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; 
} 

を今、あなたは、Javaでは方法2についても同様に

0

を見ることができ、コンパイラ性を保証どのような場合でもこの型と互換性のある値を返します。
コンパイラは、メソッドが有界の場合にのみ呼び出されるとは推測できません。したがって、条件が真または偽でない場合よりも、値が返されるかどうかをチェックする必要があります。

たとえば、checkBox()メソッドでは、複数のif if elseブロックがあります。 しかし、これらのいずれにも決して入力しない場合は、ifを返すことはありません。

solveMethod()メソッドでは、値を返さない場合もあります。

0

メソッドコンストラクタで定義されているのと同じ型で、メソッド全体の先頭に変数を設定します。

private boolean checkBox(int val, int i, int j) { 
    boolean return_val = false; 

そして...あなただけのそのboolean

ので、最初のメソッドの終わりにあなたはまた、単に return 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; 
} 

前の一番最後にそれを返します

は2番目の方法では整数なので、おそらくreturn -1またはreturn 0が機能しますか?必要があれば、return 0の条件が発生した場合には、error checkingを実行するために2番目のメソッドを呼び出す条件を実装します。

あなたは常にここで指定されたタイプと一致する型指定されたオブジェクトを返す必要があります:、具体的に

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

intは、戻り値の型を指定する

private int solveMethod

関連する問題