0

だから私は Java に比較的慣れていないので、Eclipse を使ってきました。myBrickこれの主要部分は最後の 3 行です。オブジェクトを複数回表示させたいのです。これを実行すると、2 番目の場所 (最後の行) にのみ表示されます。出来ますか?

import acm.graphics.*;
import acm.program.*;
import java.awt.*;

public class Pyramid extends GraphicsProgram {

    /** Width of each brick in pixels */
    private static final int BRICK_WIDTH = 30;

    /** Height of each brick in pixels */
    private static final int BRICK_HEIGHT = 12;

    /** Number of bricks in the base of the pyramid */
    private static final int BRICKS_IN_BASE = 14;

    public void run() {
        double windowWidth = 756;
        double windowHeight = 494;
        int numberOfBricks = (BRICKS_IN_BASE*(BRICKS_IN_BASE+1))/2;

        double emptySpace = windowWidth - (BRICK_WIDTH*BRICKS_IN_BASE);
        int cushion = (int)emptySpace/2;

        GRect myBrick = new GRect(BRICK_WIDTH, BRICK_HEIGHT);
        add(myBrick, cushion, (windowHeight-BRICK_HEIGHT));
        add(myBrick, (cushion+BRICK_WIDTH), (windowHeight-BRICK_HEIGHT));
    }
}
4

3 に答える 3

2

2 番目の add() メソッドを使用すると、2 番目のオブジェクトを作成するのではなく、同じ myBrick オブジェクトを使用するときに問題が発生する可能性があると思います。2 番目の add() 関数用に新しい GRect オブジェクトを作成してみてください。

于 2013-02-11T05:28:13.667 に答える
0

2つ目add()は、1つ目と同じオブジェクト参照を使用しています。Javaは渡し言語ですが、参照の値をオブジェクトに渡します。つまり、最初に行ったミューテーションadd()myBrick2番目のadd()呼び出しで確認されますが、これはプログラムのセマンティクスに違反していると確信しています。(このSOF投稿を読むことをお勧めします)

オブジェクトの構成はGRectそれほど複雑ではないようです。この命令を複製して、add()呼び出しの最初のパラメーターのそれぞれに使用してみませんか?GRectこのようにして、同じ状態で始まる2つのオブジェクトがあることを確認しますが、一方を変更しても他方には影響しません。

于 2013-02-11T06:00:16.410 に答える
0

他の人が指摘しているように、 add メソッドを見ずに答えを出すのは難しいです。しかし、私が間違っていなければ、あなたはこのようなものを探しているのかもしれません.

  1. そのオブジェクトのリストを作成します。リスト rectList = new ArrayList();
  2. GRect の新しいオブジェクトを作成し、add 関数を呼び出します。
  3. 新しい GRect オブジェクトを rectList に追加します。

このようにして、リストに 3 つの GRect オブジェクトが表示されます。GRect オブジェクトの値を反復して取得できます。

于 2013-02-11T06:03:15.340 に答える