经过几年的 HTML/CSS 编码后,我才刚刚开始学习 Java,所以希望我不会在这里问一个老旧或愚蠢的问题,但是任何解释这个问题的帮助将不胜感激。
我目前正在通过斯坦福 CS106A 在线材料工作,我已经达到第 6 周,作业 2,问题 3 (http://see.stanford.edu/materials/icspmcs106a/13-assignment-2-simple-java.pdf )。
如您所见,它需要在屏幕上放置各种对象来创建图形层次结构,如所述。我的计划是使用中心坐标将所有对象相对放置在屏幕上。但是我遇到了一个我似乎无法找到答案的问题。该课程描述了方法分解应该如何允许每个方法处理一个问题(我相信单一责任原则),所以我编写了我的代码的第一部分:
//Import any libraries
import acm.program.*;
import acm.graphics.*;
public class GraphicsHierarchy extends GraphicsProgram {
//Define constants
static final int BOX_WIDTH = 200;
static final int BOX_HEIGHT = 75;
public void run() {
placeGRect();
}
//Find centre x & y
double centre_x = getWidth() / 2; //check this
double centre_y = getHeight() * 0.5;//and this
//placeGRect method
public void placeGRect() {
for (int count = 0; count < 4; count++) {
GRect box = new GRect (BOX_WIDTH, BOX_HEIGHT);
add(box);
switch (count) {
case 0:
box.setLocation(centre_x, 75);
break;
case 1:
box.setLocation((centre_x * 0.5), 250);
break;
case 2:
box.setLocation(centre_x, 250);
break;
case 3:
box.setLocation((centre_x * 1.5), 250);
break;
}
}
}
}
但是,由于 center_x 和 center_y 产生零值,这不起作用。我通过将程序更改为 ConsoleProgram 并在 run() 方法中使用 getWidth 和 getHeight 行(并在屏幕上打印它们的值)发现了这一点,然后生成了所需的值但没有将它们传递给 GRect 方法(所以仍然没有工作)。但是,如果我在 run() 之外列出了 getWidth/getHeight 行,那么它们不会产生任何相对定位值。
我的问题是每个方法都应该处理一个任务,并且(尽可能)方法应该在 run() 方法之外定义,那么我怎样才能将 getWidth/getHeight 值传递给 placeGRect() 方法而没有一个run() 方法中的大块代码。我理解这是不好的做法。
我不追求任何代码来解决这个问题,我真的需要了解它的原理,这样我才能在将来编写有效的代码。我更喜欢理解鹦鹉时尚代码复制。
提前感谢您的帮助。