0

10x10 のグリッドを作成し、ロボットを位置 (10,1) に配置します (左下)。私はこのロボットが前進、左/右に曲がり、グリッド内のオブジェクトをピックアップ/配置できるようにしたいと考えています. 任意の位置に配置すると、次のように、この位置に配置されたオブジェクトの数を示すグリッドに数字が表示されます。

..........
...1......
..2.......
....3.....
..........
..........
......9...
.....4....
.........1
..........

グリッド内にロボットは表示されません。私は2つのクラスを持っています。クラス ロボット:

public class Robot {

private Area area;
private Robot rob;

public Robot(Area area){
    this.area = area;
    rob = new Robot(area);
}

public void Right(){

}
public void Left(){

}
public void Forward(){

}
public void Put(){

}
public void PickUp(){

}
public (?) getPosition(){ // should return robot's position

}
}

クラスエリア:

private int numberOfObjects;
private Robot robot;
private static final int X = 10;
private static final int Y = 10;
private Object [][] area; // grid

public Area(){ // defines a grid and robot
    area = new Area[X][Y];
    for(int a=0;a<X;a++){
        for(int b=0;b<Y;b++)
            area[a][b]=".";
    }

    numberOfObjects = 0; // grid is initially empty
    Area ar = new Area();
    robot = new Robot(ar);
}

public void Put(int x,int y){ // put the object to position (x,y)
    area[x][y]=numberOfObjects++;
}

public void PickUp(int x,int y){ // pick up the object in position (x,y)
    if(area[x][y]!=null){
        area[x][y]=numberOfObjects--;
    }
}

public void PrintAGrid(){
    for(int r=0;r<X;r++){
        for(int c=0;c<Y;c++)
        System.out.print(area[r][c]+" ");
     System.out.println();
    }
    System.out.println();
}
}

ロボットを位置 (10,1) に配置するにはどうすればよいですか? 方向を宣言して設定するにはどうすればよいですか (つまり、右側に)? 他のメソッドを書くのは簡単だと思うので、私はそれに焦点を合わせません。

4

3 に答える 3

2

コードにはいくつかの問題があります。

  1. Robotクラス内に のインスタンスがあるのはなぜRobotですか? そのインスタンスをまったく使用していません!
  2. private Object [][] area;する必要がありますint[][] area。いつもintこれで貯まってますよね?
  3. 私があなたの要件を正しく理解していれば、 and の実装は正しくpickありputません。

ここでは、問題を解決する方法について説明します。Robot入れるべきか、逆にするべきか、何度も考えなければなりGridませんでした。私はで終わっGridRobot。シングルトンであるGrid可能性があります。

これが私たちのGrid

public class Grid {
    private int[][] numberOfObjects = new int[10][10];

    public void put(int x, int y) {
        numberOfObjects[y][x]++;
    }

    public void pick(int x, int y) {
        numberOfObjects[y][x]--;
    }
}

パラメータint x, int yを に置き換えることができますPoint

そしてこちらがロボット

public class Robot {
    private static final int NORTH = 0, EAST = 1, SOUTH = 2, WEST = 3;
    private int direction;
    private int x, y;

    private Grid grid;

    public Robot(Grid grid) {
        this.x = 0;
        this.y = 0;

        this.grid = grid;
        direction = NORTH;
    }

    public void right() {
        direction++;
        if (direction == 4) {
            direction = 0;
        }
    }

    public void left() {
        direction--;
        if (direction == -1) {
            direction = 3;
        }
    }

    public void forward() {
        if (direction == NORTH) {
            y--;
        } else if (direction == SOUTH) {
            y++;
        } else if (direction == EAST) {
            x++;
        } else if (direction == WEST) {
            x--;
        }
    }

    public void put() {
        grid.put(x, y);
    }

    public void pick() {
        grid.pick(x, y);
    }
}
于 2013-05-19T17:24:19.750 に答える
0

現在の位置を変数で表し、それを 10 1 の位置に初期化する必要がありますが、配列は 0 ~ 9 および 0 ~ 9 になるため、これは 9,0 になる可能性があります。この位置を保存するには、 Point x,yを含む Point オブジェクトを試してみてください。

于 2013-05-19T16:49:48.510 に答える