2013-05-19 29 views
0

我想製作一個10x10網格並將機器人置於位置(10,1)(左下角)。我希望這個機器人能夠向前移動,左轉/右轉以及拾取/放入網格物體。擺在任何位置的時候,應該有一個網格,顯示有多少個對象放在這個位置號碼,就像這樣:機器人在網格中的位置和方向

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

我們將不會看到機器人在網格中。我有兩個班。類機器人:

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)的機器人?我如何申報和設定其方向(即在右邊)?我想這會很容易寫出其他方法,所以我不關注它。

回答

2

您的代碼有幾個問題。

  1. 爲什麼你的RobotRobot內的實例?你根本沒有使用過這個實例!
  2. private Object [][] area;應該是int[][] area。你總是在這裏保存int,對吧?
  3. 如果我正確理解您的要求,您執行pickput是不正確的。

這裏是一個幫助你如何能夠解決這些問題。如果Robot應該在Grid或者它應該是另一種方式,我不得不多次考慮。我在Robot結束了Grid。 可能是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]--; 
    } 
} 

您可以用Point替換參數int x, int y

這裏是機器人

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

方法左右手應該只開啓右/左機器人,不動它。有方法Forward()隨機器人移動。無論如何,謝謝你的幫助。我很感激。 – marek

+0

@marek:對不起,我錯過了你的問題的一部分。我在幾分鐘內更新我的答案。 – Mohayemin

+0

是的,現在看起來很好。我會做剩下的程序。非常感謝你。 – marek

0

你需要用一個變量表示一個變量的初始位置,並將它初始化爲10 1位置,儘管你的數組變爲0-9和0-9,所以這可能是9,0。要存儲這個位置,可以嘗試一個包含Point x,y的Point對象。