所以,据我所知,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初学者,我确信这有一个简单的原因,但我似乎无法找到它?!
非常感谢你对此有任何帮助。
答案 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);