我有一个 10x10 的点阵列。我向用户询问“网格”上的起点,然后生成随机遍历网格,向北、南、东和西。
我使用了一个依赖于随机数的 switch 语句逆时针迭代,检查“。” 在每个方向。如果我找到一个点,我会移动到网格上的那个位置,并增加一个字母字符。程序一直执行,直到用户到达“Z”,或者直到用户卡住——这是最先发生的。
随机数从 0-3 生成。如果为 0,程序检查北,然后东,然后南,然后西;如果为 1,则检查东方,然后检查南方,依此类推。
例如,如果用户从网格上的 1,1 开始,他/她应该能够向任何方向移动,因为网格上没有其他东西。它们完全被点包围。
我的问题是,当我将 switch 语句中的下一个可能位置传递给布尔方法时,它总是返回 false。
这是布尔方法:
public static boolean canMove(int r, int c)
{
boolean canMoveSwitch = false;
if ((r>=0 && r <=9) && (c>=0 && c <=9))
{
if(walkingGrid[r][c] == '.')
{
canMoveSwitch = true;
}
}
return canMoveSwitch;
}
这是开关的[部分]:
public static void makeAMove()
{
while(stopCode != 1)
{
getRandom();
switch(randomDirection)
{
case 0: if(canMove(row-1, col) == true)//North
{
alphabetIndex = (char)alphabetIndex + 1;
walkingGrid[row-1][col] = (char)alphabetIndex;
}
else if(canMove(row, col+1) == true)//East
{
alphabetIndex = (char)alphabetIndex + 1;
walkingGrid[row][col+1] = (char)alphabetIndex;
}
else if(canMove(row+1,col) == true)//South
{
alphabetIndex = (char)alphabetIndex + 1;
walkingGrid[row+1][col] = (char)alphabetIndex;
}
else if(canMove(row,col-1) == true)//West
{
alphabetIndex = (char)alphabetIndex + 1;
walkingGrid[row][col-1] = (char)alphabetIndex;
}
else
{
stopCode = 1;
}
break;
RandomDirection 工作正常。
我已经从主要打印它只是为了确保。Row 和 col 是用户输入的坐标。那时,它们应该能够至少朝一个方向移动,但布尔值永远不会返回 true。
我已经从主程序中打印了“canMoveSwitch”,所以我知道它正在返回一个真/假值。
我没有正确传递值吗?这是家庭作业,所以我并不是在寻找一个直接的答案;只是朝着正确的方向推进。
您的见解将不胜感激。
编辑
我想到了!当我打印网格以显示用户的位置时,我将 row 和 col 增加到它们的最大值。我所要做的就是在切换之前取回用户的值,并且效果很好!感谢所有看过这个的人!