2013-05-19 2 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. Robot 클래스 안에 Robot의 인스턴스가있는 이유는 무엇입니까? 그 인스턴스를 전혀 사용하지 않았습니다!
  2. private Object [][] area;int[][] area이어야합니다. 항상 int을 저장 하시겠습니까?
  3. 귀하의 요구 사항을 올바르게 이해하면 구현 한 pickput이 올바르지 않습니다. 여기

당신이 문제를 해결할 수있는 방법 도움이됩니다. RobotGrid에 있어야하거나 다른 방법이어야한다고 생각하면 여러 번 생각해야했습니다. 나는 GridRobot에서 끝났다. Grid 일 수 있습니다 싱글 톤. 당신은 Point와 매개 변수를 int x, int y를 대체 할 수있는 우리의 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]--; 
    } 
} 

는 여기에있다.

그리고 여기가

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 객체를 시도해보십시오.