1

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 が最大値にインクリメントされました。私がしなければならなかったことは、切り替える前にユーザーの値を取得することだけで、うまくいきました! これを見てくれたすべての人に感謝します!

4

0 に答える 0