经过几年的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;
}
}
}
}
然而,这并不因工作产生零值的centre_x & centre_y。我通过将程序更改为ConsoleProgram,并在run()方法中使用getHeight行(并在屏幕上打印它们的值),发现了这一点,然后生成所需的值但未将它们传递给GRect方法(如此仍然没有工作)。但是,如果我将getWidth/getHeight行列出run(),那么它们不会为相对定位生成任何值。我的问题是,每个方法都应该处理一个任务,并且(尽可能)方法应该从run()方法中定义出来,然后我怎么才能将getWidth/getHeight值传递给placeGRect()方法在run()方法中没有一大块代码。我理解的是不好的做法。
我没有任何代码解决这个问题,我真的需要了解这个原理,所以我可以在将来编写有效的代码。我更喜欢理解鹦鹉式的代码复制。
在此先感谢您的帮助。
您的课程名称和作业编号对大多数人来说都是无用的;为什么不给它一些有用的相关标题? – 2011-05-05 14:21:39
如果'getWidth()'和'getHeight'与'getGRect()'在同一个对象上,那么为什么你需要*来传递它们呢? – Jeremy 2011-05-05 14:28:11
道歉,在我将标题改为更有用的东西之前,我按了提交问题。 – 2011-05-05 14:52:15