【发布时间】:2017-01-06 21:15:18
【问题描述】:
我目前正在研究火星探测器 Kata。我创建了一个 10x10 的网格,流动站可以前后移动并改变方向 ['N', 'E', 'S', 'W']。因为网格实际上代表了一个球形行星,所以漫游车应该包裹在 10x10 的网格上,而不是完全离开。我正在尝试对包装进行编码。包含更多上下文的对象。我目前正在使用 if/else 语句来确定流动站应该包裹的情况,但我知道我把它复杂化了。 switch 语句会更有效吗?或者我可以以某种方式使用循环吗?我是 Javascript 的新手。非常感谢。
var myRover = {
position: [[0],[0]],
direction: 'N',
roverDirections = ['N', 'E', 'S', 'W'],
marsGrid: [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
obstacles: [];
};
if (command === 'f') {
if ((myRover.position[[0],[0]]) && (myRover.direction === 'S')) {
myRover.position[[10],[0]];
}
else if ((myRover.position[[0],[0]]) && (myRover.direction === 'W')) {
myRover.position[[0],[10]];
}
if ((myRover.position[[0],[10]]) && (myRover.direction === 'E')) {
myRover.position[[0],[0]];
}
else if ((myRover.position[[0],[10]]) && (myRover.direction === 'S')) {
myRover.position[[10],[10]];
}
if ((myRover.position[[10],[0]]) && (myRover.direction === 'N')) {
myRover.position[[0],[0]];
}
else if ((myRover.position[[10],[0]]) && (myRover.direction === 'W')) {
myRover.position[[10],[10]];
}
if ((myRover.position[[10],[10]]) && (myRover.direction === 'N')) {
myRover.position[[0],[10]];
}
else if ((myRover.position[[0],[0]]) && (myRover.direction === 'E')) {
myRover.position[[10],[0]];
}
}
【问题讨论】:
-
可能有更多的代码递增和递减计数器,它们在哪里正确?如果是这样,如果号码是
> 10或counter = 10如果号码是< 0,你可以拥有counter = 0的东西 -
你有一些语法错误:
roverDirections =应该是roverDirections:,删除obstacles之后的;,同样myRover.position[[0],[0]]没有任何意义。 -
你可以定义一个gridPoint对象,用“指针”指向周围的gridPoints,这样你就可以很容易地连接边缘。所以当你四处移动时,你改变了流动站的 currentGridPoint,而不是 x,y 坐标
-
你可以用一个一维数组来简化你的位置,比如
[1, 5]。 -
请注意,您移动 N/S 的情况并不准确到球形行星表示。您需要保持 Y 位置,将 X 位置移动最大值的一半,然后反转方向。
标签: javascript loops if-statement