0

これは少し奇妙ですが、私の Java コードは文字を適切に比較しません。

文字の2D配列をループし、すべての「I」を「D」に置き換えるこのコードがあります

for (i = 0; i < 12; i++)
    {
        for (j = 0; j < 12; j++)
        {
            if (activeGrid[i][j] == 'I')
            {
                activeGrid[i][j] = 'D';
                System.out.println("Changing [" + i + "][" + j + "]");
            }
            else
            {
                System.out.println("No I in [" + i + "][" + j + "]");
            }
        }
    }

ただし、正しく動作していないようです。実行例を次に示します。

   0 1 2 3 4 5 6 7 8 9 A B
   _ _ _ _ _ _ _ _ _ _ _ _
0 | | | | | | | | | | | | |
1 | | | | | | | | | | | | |
2 | | | | | | | | | | | | |
3 | | | | | | | | | | | | |
4 | | | | | | | | | | | | |
5 | | | | | |D| | | | | | |
6 | | | | | | | | | | | | |
7 | | | | | | | | | | | | |
8 | | | | | | | | | | | | |
9 | | | | | | | | | | | | |
10 | | | | | | | | | | | | |
11 | | | | | | | | | | | | |

   0 1 2 3 4 5 6 7 8 9 A B
   _ _ _ _ _ _ _ _ _ _ _ _
0 | | | | | | | | | | | | |
1 | | | | | | | | | | | | |
2 | | | | | | | | | | | | |
3 | | | | | | | | | | | | |
4 | | | | | |I| | | | | | |
5 | | | | |I|D|I| | | | | |
6 | | | | | |I| | | | | | |
7 | | | | | | | | | | | | |
8 | | | | | | | | | | | | |
9 | | | | | | | | | | | | |
10 | | | | | | | | | | | | |
11 | | | | | | | | | | | | |

(読みやすくするために「No I in...」の部分を削除しました)

その後、ここからの更新を拒否します。何回取得しようとしても、I が D に変わりません。さらに紛らわしいのは、I の一部またはすべてが変更され、後で行き詰まる場合があることです。

コードの他の部分でも同様のことがわかります。ある部分では、D に隣接する各セルをチェックし、D が拡散するかどうかを判断します。拡散しない要因の 1 つは、セルに D または I が既に存在するかどうかです。ただし、一部のセルでは、Enter キーを押すたびに値が D から I に切り替わることがわかり、D の海にランダムな I が表示されることもわかります

何か案は?

[編集]

アクティブ グリッドは次のように初期化されました。

public char[][] setActiveGrid (int x, int y)
{
    char grid[][] = new char [12][12];
    int Px;
    int Py;
    for (int i = 0; i < 12; i++)
    {
        for (int j = 0; j < 12; j++)
        {
            grid[i][j] = ' ';
        }
    }
    grid[x][y] = 'D';
    do
    {
        Px = (int) Math.ceil((Math.random() * 12) - 1);
        Py = (int) Math.ceil((Math.random() * 12) - 1);
    } while (Px == x && Py == y);
    //grid[Px][Py] = 'P';

    return grid;
}

そして、これによってのみ変更されます:

public char[][] spreadDisease (char regionGrid[][], char activeGrid[][])
{
    char regionFlag;
    int i;
    int j;
    int xDiff;
    int yDiff;

    for (i = 0; i < 12; i++)
    {
        for (j = 0; j < 12; j++)
        {
            if (activeGrid[i][j] == 'D')
            {
                regionFlag = regionGrid[i][j];

                for (xDiff = -1; xDiff < 2; xDiff = xDiff + 2)
                {
                    if (regionGrid[(i+xDiff)][j] == regionFlag && (activeGrid[(i+xDiff)][j] != 'D' || activeGrid[(i+xDiff)][j] != 'I'))
                    {
                        activeGrid[(i+xDiff)][j] = 'X';
                    }
                    else
                    {
                        activeGrid[(i+xDiff)][j] = 'Y';
                    }
                }
                for (yDiff = -1; yDiff < 2; yDiff = yDiff + 2)
                {
                    if (regionGrid[i][(j+yDiff)] == regionFlag && (activeGrid[i][(j+yDiff)] != 'D' || activeGrid[(i+xDiff)][j] != 'I'))
                    {
                        activeGrid[i][(j+yDiff)] = 'X';
                    }
                    else
                    {
                        activeGrid[i][(j+yDiff)] = 'Y';
                    }
                }
            }
        }
    }
    return activeGrid;
}

regionGrid は、+ - * と ~ のランダムな組み合わせで満たされた 2D char 配列です。D の広がりのルールは次のとおりです。

  • D に隣接するセルが D と同じ領域文字を持つ場合、それらは D に設定されます。
  • それ以外の場合、それらは I に設定され、次に D に設定されます。
4

1 に答える 1