【发布时间】:2012-01-30 02:35:09
【问题描述】:
我正在使用 LRV(最近访问最少)算法制作程序。基本上,我为机器人设计了穿过网格(这是一个二维字符数组)的算法。机器人在遍历网格时检查每个单元格是EMPTY(由'O'定义)、OCCUPIED(由'S'定义)还是BLOCKED(由'X'定义)。这些单元只能被称为传感器的对象占据(这有自己的类)。 BLOCKED 单元格不能被遍历。每次机器人必须移动时,它都会从传感器接收一个方向。所以一开始机器人会被放置在网格上,它会放下一个传感器并从中获取方向,或者从预先存在的传感器中获取方向。
现在我已经解释了我的程序,我的具体问题是,
我有一个类 Sensor,它有一个返回 INT 的getVisitingDirection 方法。
每个方向都有一个计数器(INT 类型的北、南、东和西)
这是课程。
package ITI1121A;
public class Sensor {
private int cColumns;
private int cRows;
private int North;
private int South;
private int West;
private int East;
public Sensor(int sX, int sY) {
cColumns = sX;
cRows = sY;
South= -1;
North = -1;
West = -1;
East = -1;
}
/* ADD YOUR CODE HERE */
public int getX ()
{return cColumns;}
public int getY ()
{return cRows;}
public int getVisitingDirection(GridMap g1)
boolean temp;
{
if(cRows==0){
//top row
if(cColumns==0){
temp=g1.isCellBlocked(cColumns+1,cRows);
if (temp=false){
return West++;
}
}
}
}
public void increaseCounter(int direction)
{}
}
现在我被困在 getVisitingDirection,我尝试使用 if 语句来检查网格的左上边缘(坐标 0,0),是的,就是这样。 我希望该方法给机器人一个方向,然后增加该方向的计数器。 甚至在这里得到这个概念也有真正的困难。 任何帮助将不胜感激! 谢谢 瓦伦
【问题讨论】:
-
Sau 机器人被放置在 (3,3) 并在 (3,4) 放置一个传感器,然后传感器将指示机器人移动到 (2,3) 然后?机器人在 (3,3) => 他的最后一个位置放置了一个新传感器?还是 (3,4) 处的那个传感器不断向网格中的任何位置发出命令?
-
放置在(3,3),检查是否为空,如果是则放置'S'..然后从'S'获取下一步移动的方向,依此类推。每次机器人检测到单元中的传感器时,它都会询问方向
-
啊!那么机器人和传感器可以“共存”在同一个单元格上吗?机器人位于 (5,5) 处,那里没有传感器。然后它在 (5,5) 放置一个传感器并询问方向,是这样吗?
-
机器人检查当前单元格的内容。如果它是空的,它会将一个传感器放在那里,并从该传感器请求一个沿网格移动的方向。如果单元被占用,机器人会向位于单元的传感器请求相同的信息。
-
每当传感器掉入单元中时,它都会在本地为机器人可以移动到的四个可能方向(北、东、南、西)中的每一个维护一个计数器。根据传感器的位置和环境的拓扑结构,某些方向可能无效。例如,位于网格左上角单元格的传感器永远不会向机器人推荐北或西,因为它们超出了环境的范围。同样,与被阻塞单元相邻的传感器永远不会向机器人推荐该方向。