2

那么,据我了解,do while 循环总是至少运行一次?但如果是这种情况,为什么我们需要在循环之外声明和初始化变量?

以下面的代码为例:

    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 循环,这是无法完成的。

请注意,如果您再引入一个变量,您的代码将起作用:

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 回答