我想制作一个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)?我如何声明和设置其方向(即在右侧)?我想编写其他方法会很容易,所以我不关注它。
答案 0 :(得分:2)
您的代码存在一些问题。
Robot
中有Robot
的实例?您根本没有使用过该实例!private Object [][] area;
应为int[][] area
。您始终将int
保存在此,对吗?pick
和put
的实施方式不正确。以下是帮助您解决问题的方法。如果Robot
Grid
应该在Grid
,或者它应该是另一种方式,我必须多次思考。我最终在Robot
中找到了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);
}
}
。
这是机器人
{{1}}
答案 1 :(得分:0)
你需要用变量表示curent位置并将其初始化为10 1位置,尽管你的数组是0-9和0-9所以这可能是9,0。存储此位置可能会尝试包含Point x,y。
的Point对象答案 2 :(得分:0)
如果有人对 JavaScript 版本感兴趣,您可以查看此存储库 right here。一般:
left
、up
、right
、down
)。left
、right
、move
。话虽如此,算法非常简单:
totalScore = 0
Foreach i in input
computeCurrentDirection()
if input != MOVE: continue
totalScore += i
return totalScore
有些人可能会使用一些技巧来优化功能。看看switchDirection
。
const directionArray = [Directions.RIGHT, Directions.DOWN, Directions.LEFT, Directions.UP];
const switchDirection = (currDirection, command) => {
if (command === Commands.MOVE) {
return currDirection
}
const currDirectionIndex = directionArray.indexOf(currDirection);
if (command === Commands.RIGHT) {
return directionArray[(currDirectionIndex + 1) % 4];
}
return directionArray[((currDirectionIndex - 1) + 4) % 4];
}
有人可能会使用数组来帮助计算机器人即将到来的方向,而不是采用详尽的方法。这显着减少了所需的代码量。
<块引用>请注意,此实施可以轻松扩展以适应项目扩展所需的任何新要求。遇到此类问题时,请尝试以可测试和可扩展的方式构建您的代码库,因为通常情况下,审阅者对您的编码组织技能感兴趣,而不是您是否能够解决问题。