Java中的Do-While循环

时间:2013-11-09 18:59:14

标签: java variables compilation

所以,据我所知,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初学者,我确信这有一个简单的原因,但我似乎无法找到它?!

非常感谢你对此有任何帮助。

3 个答案:

答案 0 :(得分: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值,则不能。为了实现这一点,您应该再次在循环之前声明变量

答案 1 :(得分: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
}

答案 2 :(得分: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. Scope of a Declaration

您想重新编写代码:

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);