Java变量可能尚未初始化

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.

即使不是这种情况下,它看起来对我来说,他们都得到分配,所以我有点困惑的错误.

为什么会这样?

Chr*_*ian 7

实例变量(在您的情况下,它们将是整数)被指定为0默认值.局部变量不是.(来自Java Docs)

如果未输入循环,则不会初始化变量,这就是错误的原因.

您可以做的是在声明时初始化它们:

int a=0, b=0, c=0;
Run Code Online (Sandbox Code Playgroud)


Ant*_*onH 5

你的问题是这一行:

System.out.println("(" + a + ", " + b + ", " + c + ")");
Run Code Online (Sandbox Code Playgroud)

这是while (!answerFound) {...}循环之后.编译器认为可能存在一个或多个变量的情况下a,bc将不会被初始化.

使用此行:

int a=0, b=0, c=0;
Run Code Online (Sandbox Code Playgroud)

在声明变量时,以便在声明时初始化它们,并且错误应该消失.