2016-09-04 9 views
1

私は自分の割り当てに合わせてコードを完成しようとしていますが、最後のコンポーネントに固執しています。私は "空"に "星"(小さな黄色の四角いオブジェクト)を作成する必要があります... 10星の5行のグリッド。私は初心者のJavaクラスにあり、star.moveHorizo​​ntal()やstar.moveVertical()などのメソッドを使用することになっています。私が検索したすべての関連記事は、あまりに複雑すぎたり、わかりにくいものでした。複数のオブジェクトを「x」離して作成する

私は配列を作成する必要があると思いますか?私たちはクラスでそれをカバーしていません...そして、各星をx距離(最初の星)+右に30単位にします。その後、10個の星が連続するまでその傾向を続けます。そして10個の星がさらに4列並んでいます。ここで

は私が(私のウィンドウの左上にある)ただ1つ星のために作成したコードです:その後、私は正方形のクラスの配列を作成しようとしました

Square s1 = new Square(); 
s1.makeVisible(); 
s1.changeColor("yellow"); 
s1.changeSize(5); 
s1.moveVertical(-100); 
s1.moveHorizontal(-270); 

...私は正直に持っていますそれが合法であるかどうかは考えられません。

Square[] starArray = new Square[10]; 
for (int i=0; i<starArray.length; i++) { 
starArray[i] = new Square(); 

しかし、その後、私は助けてください...私はそれぞれの星を呼び出し、それらを表示させることができる方法を理解していません。私は自分の深みからそんなに感じる。私はこれを研究し、2.5時間以上新しいことを試みようとしました。私は自分の能力の中で最高のものを持っていればどんな質問にも答えます。ありがとうございました

+0

どこでスタートを表示する必要がありますか?単純なコンソールまたはスイングの場合 – 11thdimension

+0

後で正方形を参照する必要がない限り、配列を作成する必要はありません。 – c0der

答えて

1

星を1つ表示させることができ、配列についてまだ学習していない場合は、先生が探している答えではないと思います。配列のポイントはコンテナになりますので、オブジェクトを再度参照することができます。将来星に戻る必要がなければ、それらを作成してループの中で値を設定するだけです。

// Set defaults for spacing and start positions 
int horizontalStartPosition = 10; 
int horizontalSpacing = 30; 
int verticalStartPosition = 10; 
int verticalSpacing = 30; 
// Outer loop creates the 4 rows 
for (int i = 0; i < 4; i++) { 
    // Inner loop creates each row 
    for (int j = 0; j < 10; j++) { 
     // Create the next star in the row 
     Square s = new Square(); 
     s.makeVisible(); 
     s.changeColor("yellow"); 
     s.changeSize(5); 
     // Move the star to the correct vertical position for the current row 
     s.moveVertical(verticalStartPosition + i * verticalSpacing); 
     // Move the star to the correct horizontal spacing for the next star 
     s.moveHorizontal(horizontalStartPosition + j * horizontalSpacing); 
    } 
} 
+0

最後に 's.makeVisible();'を置く方が良いと思います。また、コンテナに 's'を追加する必要があります。 – c0der

+0

@ c0der私はそれについても考えましたが、OPが他のコードを共有していなかったので、星を表示するためのコードを変更しないことをお勧めしました。コンテナに 's 'を追加しなかったのは、それを読んだときに問題の範囲にないからです。 –

0

私が理解していることに基づいて、基本的にグリッドにスターを配置するメソッドを呼び出すとします。 私はあなたが何を意味するのかは十分には分かっていませんが、ここに私があなたに提供できるものがあります:

星を配置する方法を作成したいと思うでしょう。全画素[X_SPACING]によって分離されている[rowsAmount】星の行を作成してください "makeRow" を呼び出す基本的

private static int X_SPACING = 30; private static int Y_SPACING = 20; public Square placeStar(int x, int y){ // This is the same code that you had before. Square sq = new Square(); sq.changeColor("yellow"); sq.changeSize(5); sq.moveVertical(-y); // Where Y is the distance from the TOP LEFT. sq.moveHorizontal(-x); return sq; } public ArrayList<Square> makeRow(int columnsAmount, int y, int startX){ ArrayList<Square> squares = new ArrayList<>(); for(int i = 0; i < columnsAmount; i++) squares.add(placeStar(startX + (X_SPACING * i), y)); return squares; } public ArrayList<Square> makeGrid(int rowsAmount, int columnsAmount){ ArrayList<Square> rslt = new ArrayList<>(); for(int i = 0; i < rowsAmount; i++) rslt.addAll(makeRow(columnsAmount, (i * Y_SPACING), 0); return rslt; } 

、。 それから、makeGridはmakeRowを複数回[y]を調整して呼び出すでしょう。これはグリッドになります。コード内の任意の値を自由に調整してください。

EDIT:makeGrid関数を追加しました。私はそれらを誤って入力したので、makeRowのいくつかの変数を変更しました。私は関数がArrayListを返すようにしましたが、先生が後でそれらを修正するように依頼した場合にのみ、それらは必要ではありません。

私はこれが助けてくれることを願っています。もっとお気軽に質問してください。 蛇口。

0

あなたは正しい道を歩いています。 5行10列の2D配列を使用できます。

int numColumns = 10; //the number of columns in the array 
int numRows = 5; // the number of rows in the array 
Square[][] starArray = new Square[numRows][numColumns]; // the array itself 
final int DIST_X = 10; //the distance between columns (use final because this value should not change) 
final int DIST_Y = 10; // the distance between rows (use final because this value should not change) 
int y = 0; // the initial row's vertical displacement 

for (int i=0; i<numRows; i++) { 
    int x = 0; // the initial columns horizontal displacement 
    for (int j=0; j<numColumns; j++) { 
     starArray[i][j] = new Square(); //define the square 
     starArray[i][j].moveHorizontal(x); // move it x units horizontally 
     starArray[i][j].moveVertical(y); // move it y units vertically 
     starArray[i][j].makeVisible(); //show the square 
     x += DIST_X; //update your horizontal displacement so the next column shows up in the correct position 
    } 
    y += DIST_Y; //update your vertical displacement so the next row shows up in the correct position 
} 
関連する問題