为什么我的变量不能“记住” if语句中的更改?

时间:2019-11-17 13:07:34

标签: loops if-statement variables

我的代码有问题:我的程序将绘制一些特定的矩形。因此,我使用循环来计算新矩形的重复大小。

    int c = readInt("Counter: ");
    double width1 = readDouble("Width: ");
    for (int i = 0; i <= c; i++) {

        double height1;
        double lastwidth;
        double lastheight;
        double topleftx;
        double toplefty;


        if ((i == 1) && (i != 0)) {
            topleftx = 0;
            toplefty = 0;
            height1 = width1 / 1.618;
            GRect rect = new GRect(topleftx, toplefty, width1, height1);
            add(rect);
            lastwidth = width1;
            lastheight = height1;
        }
        ;

        if ((i == 2) || ((i - 2) % 4 == 0) && (i != 0)) {
            height1 = lastheight;
            width1 = height1 / 1.618;
            toplefty = toplefty;
            topleftx = topleftx + lastwidth - width1;
            GRect rect = new GRect(topleftx, toplefty, width1, height1);
            add(rect);
            lastwidth = width1;
            lastheight = height1;
        }
    }

但是我收到一些类似的错误消息: 本地变量lastheight可能尚未初始化。 在第二个循环的height1 = lastheight;行中。 但是我已经在第一个循环中初始化了变量。就像我的变量忘记了我在第一个循环中赋予它的值...?!

但是为什么呢?我该如何解决呢?

感谢您的帮助。 :)

2 个答案:

答案 0 :(得分:0)

尝试首先为它们提供默认值:

double height1 = 0.0;
double lastwidth= 0.0;
double lastheight=0.0;
double topleftx=0.0;
double toplefty=0.0;

答案 1 :(得分:0)

在声明时使用默认值初始化height1变量。

因为编译器会检查所有情况,例如如果首先if语句永远不会运行会发生什么,在这种情况下,height1变量将未初始化...

因此,在这种情况下,请始终使用一些默认值或哑数值来初始化变量。例如。

double height1 = 0.0;