bcl*_*man 2 java initialization
我正在研究Project Euler Problem 9,它指出:
毕达哥拉斯三元组是一组三个自然数,a <b <c,其中,
a^2 + b^2 = c^2
Run Code Online (Sandbox Code Playgroud)
例如,3 ^ 2 + 4 ^ 2 = 9 + 16 = 25 = 52.
恰好存在一个毕达哥拉斯三元组,其中a + b + c = 1000.找到产品abc.
这是我到目前为止所做的:
class Project_euler9 {
public static boolean determineIfPythagoreanTriple(int a, int b, int c) {
return (a * a + b * b == c * c);
}
public static void main(String[] args) {
boolean answerFound = false;
int a, b, c;
while (!answerFound) {
for (a = 1; a <= 1000; a++) {
for (b = a + 1; b <= 1000; b++) {
c = 1000 - a - b;
answerFound = determineIfPythagoreanTriple(a, b, c);
}
}
}
System.out.println("(" + a + ", " + b + ", " + c + ")");
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行我的代码时,我收到此错误:
Project_euler9.java:32: error: variable a might not have been initialized
System.out.println("The Pythagorean triplet we're looking for is (" + a + ", " + b + ", " + c + ")");
Run Code Online (Sandbox Code Playgroud)
注意:我的每个变量(a,b和c)都有不同的行号.
我认为当我将a,b和c声明为整数时,如果未分配,则默认值为0.
即使不是这种情况下,它看起来对我来说,他们都做得到分配,所以我有点困惑的错误.
为什么会这样?
实例变量(在您的情况下,它们将是整数)被指定为0默认值.局部变量不是.(来自Java Docs)
如果未输入循环,则不会初始化变量,这就是错误的原因.
您可以做的是在声明时初始化它们:
int a=0, b=0, c=0;
Run Code Online (Sandbox Code Playgroud)
你的问题是这一行:
System.out.println("(" + a + ", " + b + ", " + c + ")");
Run Code Online (Sandbox Code Playgroud)
这是while (!answerFound) {...}循环之后.编译器认为可能存在一个或多个变量的情况下a,b或c将不会被初始化.
使用此行:
int a=0, b=0, c=0;
Run Code Online (Sandbox Code Playgroud)
在声明变量时,以便在声明时初始化它们,并且错误应该消失.
| 归档时间: |
|
| 查看次数: |
3606 次 |
| 最近记录: |