我有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工作正常。
我从main打印它只是为了确保。 Row和col是用户输入的坐标。那时,它们应该能够至少向一个方向移动,但布尔永远不会返回true。
我从主程序打印了“canMoveSwitch”,所以我知道它返回了一个真/假值。
我没有正确传递值吗?这是为了做作业,所以我并不是在寻找一个彻头彻尾的答案;只是向正确的方向推
您的见解将受到赞赏。
的 修改
我明白了!当我打印网格以显示用户的位置时,我将row和col增加到它们的最大值。我所要做的只是在切换之前取回用户的值,它工作正常!感谢所有看过这个的人!