0
public class MultiplicationClass{

int answer;
int random;
int random2;

int create(){
    random = (int)(1+Math.random()*15);
    random2 = (int)(1+Math.random()*15);
    return random;
    return random2;
}

boolean checkAnswer(int useranswer){
    if(useranswer==getAnswer()){
        return true;
    }else{
        return false;
    }
}

int getAnswer(){
    return random*random2;
} 

}

このコードは常にエラーを出します: unreachable statement in the line "return random2"

4

4 に答える 4

6

Java の各メソッドは、値を 1 つだけ返すことができます。あなたの例では、これらの値をグローバル変数に割り当てているため、値を返す必要はありません。したがって、これで十分です。

void create(){
    random = (int)(1+Math.random()*15);
    random2 = (int)(1+Math.random()*15);
}

2 つの値を返したい場合は、メソッドを 2 回呼び出して、次のように変数に割り当てます。

int create(){
    int random = (int)(1+Math.random()*15);
    return random;
}

...

int getAnswer(){
    answer = create();
    answer2 = create();
    return answer*answer2;
} 
于 2013-04-17T14:55:37.490 に答える
6

2 回返すことはできません。return ステートメントは 1 つしか持てません。

return random;
return random2; // This one will never be reached since you've already returned from the method.

このメソッドが int を返すように、メソッドに戻り値がある場合、メソッドは少なくとも 1 つの値を返す必要があります。return ステートメントがブランチ自体で囲まれていない場合、return ステートメントの後の命令は到達できず、ご覧のとおり、コンパイル エラーがスローされます。

複数のブランチについて、いくつかの例を挙げて説明します。

public int someMethod(int i) {
  if(i == 0) {
    return i;
  }
}

i が 0 に等しくない場合に何が起こるか、コンパイラはメソッドを返す方法を知らないため、このメソッドはコンパイルされません。これを修正するには、else または最後の return ステートメントを追加します。どちらも機能します。

public int someMethod(int i) {
  if(i == 0) {
    return i;
  }
  return 2;
}

または:

public int someMethod(int i) {
  if(i == 0) {
    return i;
  } else {
    return 2;
  }
}

これで、コンパイラは i が 0 でないかどうかを認識し、何らかの値を返すことができます。

また、無関係なメモですが、コードの記述方法を一瞥すると、Cのバックグラウンドから来ていると思います。すべてのメソッドと変数は、デフォルト スコープまたはパッケージ プライベートと呼ばれるものです。クラスが public と宣言されていても、これらはクラス自体、および同じパッケージを共有するクラスによってのみアクセスできます。

ここを見たいかもしれません:

http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

于 2013-04-17T14:51:58.053 に答える