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 は正常に動作しています。
念のため、メインから印刷しました。行と列は、ユーザーが入力した座標です。その時点で、少なくとも 1 つの方向に移動できるはずですが、ブール値が true を返すことはありません。
メインプログラムから「canMoveSwitch」を出力したので、真/偽の値を返していることがわかりました。
値を正しく渡していませんか? これは宿題なので、はっきりした答えを求めているわけではありません。正しい方向に押し込むだけです。
どうぞよろしくお願いいたします。
編集
私はそれを考え出した!ユーザーの位置を表示するためにグリッドを印刷すると、row と col が最大値にインクリメントされました。私がしなければならなかったことは、切り替える前にユーザーの値を取得することだけで、うまくいきました! これを見てくれたすべての人に感謝します!