Position and orientation of robot in a grid

时间秒杀一切 提交于 2020-01-07 04:45:11

问题


I want to make a 10x10 grid and put the robot in position (10,1) (bottom left). I want this robot to be able to move forward, turn left/right and to pick up/put objects in a grid. When put in any position, there should be number in a grid which shows how many objects is put in this position, just like this:

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

We will not see the robot in a grid. I have two classes. Class Robot:

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

}
}

Class Area:

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();
}
}

How can I put the robot in position (10,1)? How can I declare and set its orientation (i.e. on the right)? I guess it will be easy to write other methods, so I do not focus on it.


回答1:


There are several issues with your code.

  1. Why do you have an instance of Robot inside the class Robot? You have not used that instance at all!
  2. private Object [][] area; should be int[][] area. You always save int in this, right?
  3. If I understand your requirements correctly, Your implementation of pick and put is not correct.

Here is a help how you can solve the problems. I had to think several times if Robot should be in Grid or it should be the other way. I ended up with Grid in Robot. May be Grid could be a singleton.

Here is our 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]--;
    }
}

You can replace parameters int x, int y with a Point.

And here is the robot

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);
    }
}



回答2:


You need to represent the curent location with a variable and initialize it to the 10 1 postion, though your array goes 0-9 and 0-9 so this may be 9,0. to store this position maybe try a Point object that contains a Point x,y.



来源:https://stackoverflow.com/questions/16637006/position-and-orientation-of-robot-in-a-grid

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!