数年間 HTML/CSS コーディングを行った後、Java の学習を始めたばかりなので、ここで古い質問や愚かな質問をしていないことを願っていますが、この問題を説明する助けをいただければ幸いです。
私は現在、スタンフォード CS106A オンライン教材に取り組んでおり、第 6 週、課題 2、質問 3 (http://see.stanford.edu/materials/icspmcs106a/13-assignment-2-simple-java.pdf) に到達しました。 )。
ご覧のとおり、グラフィックス階層を作成するには、画面上にさまざまなオブジェクトを配置する必要があります。私の計画は、中心座標を使用して、画面上のすべてのオブジェクトを相対的に配置することでした。しかし、答えが見つからないように見える問題にぶつかりました。このコースでは、メソッド分解が各メソッドで 1 つの問題を処理できるようにする方法について説明します (単一責任の原則だと思います)。そのため、コードの最初の部分を次のように記述しました。
//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 に変更し、 getWidth と getHeight の行を run() メソッド内に配置して (そしてそれらの値を画面に表示して)、必要な値を生成しましたが、それらを GRect メソッドに渡しませんでした (そのため、それでもうまくいきませんでした)。ただし、run() からリストされた getWidth/getHeight 行がある場合、それらは相対位置の値を生成しません。
私の質問は、各メソッドが 1 つのタスクを処理する必要があり、(可能な限り) メソッドが run() メソッドから定義されている必要があるということです。 run() メソッド内のコードの大きなブロック。私が理解しているのは悪い習慣です。
私はこれを解決するためのコードを求めているわけではありません。将来的に効果的なコードを書くことができるように、この原則を理解する必要があります。オウムのようにコードをコピーするよりも、理解することを好みます。
助けてくれてありがとう。