我正在尝试为我的作业完成我的代码,但我仍然坚持最后一个组件。我需要创造"明星" (小黄色方形物体)在"天空" ... 5行10星的网格中。我是初学java类,我应该使用star.moveHorizontal()或star.moveVertical()等方法。我搜索过的所有相关帖子都过于复杂或无法理解。
我认为我需要创建一个数组?我们甚至没有在课堂上报道这一点......然后让每个"明星"是x距离(第一颗星)+右边30个单位。然后继续这个趋势,直到连续10颗星。然后再获得四排10颗星。
以下是我为一颗星(我的窗口左上角)创建的代码:
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 :(得分: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);
}
}
答案 1 :(得分:0)
根据我的理解,您可能希望调用一种方法,该方法基本上可以为您在网格中放置一个星形。 我不完全确定你的意思,但我能为你提供:
您想要创建一种放置星星的方法。
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;
}
基本上,打电话给#34; makeRow&#34; 应该创建一行[rowsAmount]星,这些星都由[X_SPACING]像素分隔。 然后,makeGrid将多次调用makeRow调整[y],这将使你成为一个网格。您可以随意调整代码中的任何值。
编辑:我添加了一个makeGrid函数,并在makeYow中更改了一些变量,因为我输错了它们。我让这些函数返回一个ArrayList,但你不应该需要它们,只有你的老师后来要求稍后修改它们,或者其他东西。
我希望这会有所帮助,不要犹豫,提出更多问题。 Sneling。
答案 2 :(得分: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
}