2

だから、私が理解している限り、do while ループは常に少なくとも 1 回は実行されますか? しかし、この場合、ループの外で変数を宣言して初期化する必要があるのはなぜでしょうか?

たとえば、次のコードを見てください。

    do {

    int a = (int) (Math.random() * 13);
    int b = (int) (Math.random() * 13);
    int c = (int) (Math.random() * 13);
    int d = (int) (Math.random() * 13);

    }

    while (a + b + c + d != 24);

これは、a、b、c、d が初期化されていない可能性があるというコンパイル エラーをスローします。私はJavaの初心者なので、これには簡単な理由があると確信していますが、それを見つけることができないのですか?!

これを手伝ってくれてありがとう。

4

3 に答える 3

3

それがあなたの問題であるため、変数のスコープを調べてください。宣言されたスコープ外の変数にアクセスしようとしています。ここでは do-while ループですが、これは実行できません。

もう1つの変数を導入すると、コードが機能することに注意してください。

int sum = 0; // scope is *outside* of do-while loop
do {
  int a = (int) (Math.random() * 13);
  int b = (int) (Math.random() * 13);
  int c = (int) (Math.random() * 13);
  int d = (int) (Math.random() * 13);
  sum = a + b + c + d;
} while (sum != 24);

ただし、a、b、c、および d の値にアクセスする必要がある場合は、アクセスできないことに注意してください。これを可能にするには、ループの前に変数を宣言する必要があります。

于 2013-11-09T19:01:41.030 に答える
1

これは次のように書き直すことができます

int a = (int) (Math.random() * 13);
int b = (int) (Math.random() * 13);
int c = (int) (Math.random() * 13);
int d = (int) (Math.random() * 13);

while (a + b + c + d != 24){
 a = (int) (Math.random() * 13);
 b = (int) (Math.random() * 13);
 c = (int) (Math.random() * 13);
 d = (int) (Math.random() * 13);
//do something
}
于 2013-11-09T19:02:31.607 に答える
0
do {

    int a = (int) (Math.random() * 13);
    int b = (int) (Math.random() * 13);
    int c = (int) (Math.random() * 13);
    int d = (int) (Math.random() * 13);

    }

    while (a + b + c + d != 24);

これはスコープの問題です。jls 6.3を見てください。宣言の範囲

次のようにコードを書き直します。

int a = 0; //I am being explicit here  
int b = 0;
int c = 0;
int d = 0;
 do {

        a = (int) (Math.random() * 13);
        b = (int) (Math.random() * 13);
        c = (int) (Math.random() * 13);
        d = (int) (Math.random() * 13);

        }

        while (a + b + c + d != 24);
于 2013-11-09T19:05:41.323 に答える