分配变量然后在参数中使用变量?

时间:2010-02-18 04:40:37

标签: java

我正在这些免费的在线斯坦福大学课程和学习Java。我陷入困境,无法弄明白。我认为我的逻辑肯定有问题。请查看下面的代码。我评论过,所以希望你能理解我在那里做的事情。

import acm.graphics.*;
import acm.program.*;
import java.awt.*;

public class Pyramid extends GraphicsProgram {

/** Width of each brick in pixels */
    private static final int BRICK_WIDTH = 30;

/*  Width of each brick in pixels */
    private static final int BRICK_HEIGHT = 12;

/** Number of bricks in the base of the pyramid */
    private static final int BRICKS_IN_BASE = 14;

/** The Width of the Base in px  */ 
    double baseInPx = BRICKS_IN_BASE * BRICK_WIDTH;

/** Taking the width of the window minus the width of the base and dividing by two 
 * to find the x axis starting point)   
 */
    double firstBrick = (getWidth() - baseInPx) / 2;

/* giving the y axis a variable name  */
        double baseHeight = getHeight();

    public void run() {

        add(new GRect(firstBrick,baseHeight,BRICK_WIDTH, BRICK_HEIGHT));

    }   

}

我想我必须在这行格式化中做错事:

double firstBrick = (getWidth() - baseInPx) / 2;

问题是我的x轴变量不起作用。如果我在那里对数字进行硬编码,则会显示rect,但不会显示firstBrick

感谢您的帮助!

编辑:谢谢大家的帮助!几乎每个人都是对的。我刚刚学到了一些东西!

6 个答案:

答案 0 :(得分:2)

我会尽力帮助你自己。尝试将计算移动到run方法并打印出值,以查看它与硬编码值时的预期差异。

答案 1 :(得分:2)

将firstBrick和baseHeight移动到run方法中,看看是否有效。

public void run() {
    double firstBrick = (getWidth() - baseInPx) / 2;
    double baseHeight = getHeight();

    add(new GRect(firstBrick,baseHeight,BRICK_WIDTH, BRICK_HEIGHT));

}

我的猜测是你的getWidth()和getHeight()是实例方法,而不是静态方法。所以你不能在你的对象初始化块中调用它们(在你的示例代码中:任何方法之外的inits),因为Pyramid对象尚未完全初始化。

您还可以声明变量的位置,并在Pyramid构造函数中初始化它们,这是首选方法。这就是构造函数的用途。

答案 2 :(得分:0)

看看这段代码

public class Assignment {

    private String a = setString();
    private String b;

    public Assignment() {
        b = "set in constructor";
    }

    private String setString() {
        return b;
    }

    private String getA() {
        return a;
    }

    public static void main(String[] args) {
        System.out.println(new Assignment().getA());
    }

}

这将打印null;

我猜是类似的事情正在发生。也许金字塔的宽度和高度是在构造函数中设置的,因此在调用时,getWidth和getHeight默认为0.0。

答案 3 :(得分:0)

尝试在run方法中或在构造函数中设置firstBrick和baseHeight。

import acm.graphics.*;
import acm.program.*;
import java.awt.*;

public class Pyramid extends GraphicsProgram {

    private static final int BRICK_WIDTH = 30;
    private static final int BRICK_HEIGHT = 12;
    private static final int BRICKS_IN_BASE = 14;
    double baseInPx = BRICKS_IN_BASE * BRICK_WIDTH;

    double firstBrick;
    double baseHeight;

    public void run() {
       firstBrick = (getWidth() - baseInPx) / 2;
       baseHeight = getHeight();

       add(new GRect(firstBrick,baseHeight,BRICK_WIDTH, BRICK_HEIGHT));

    }   

}

答案 4 :(得分:0)

你的问题就在这一行:

double firstBrick =(getWidth() - baseInPx)/ 2;

在执行此行的时间点,getWidth()返回0;操作会产生一个不会被绘制的负数。

如前所述,您必须在构建UI后调用该函数。 - > run()的

答案 5 :(得分:0)

如果您真的需要,答案就在this link的底部。你是在正确的轨道上,但你正在谈论的特定线路是正确的。