これは少し奇妙ですが、私の 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 に設定されます。