创建多个对象" x"距离彼此相距

时间:2016-09-04 01:32:29

标签: java

我正在尝试为我的作业完成我的代码,但我仍然坚持最后一个组件。我需要创造"明星" (小黄色方形物体)在"天空" ... 5行10星的网格中。我是初学java类,我应该使用star.moveHorizo​​ntal()或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小时了。我会尽我所能回答你的任何问题。谢谢

3 个答案:

答案 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
}