Ken Ken パズルを作成しようとするプロジェクトを開始しました。Ken Ken が何かわからない場合は、行または列に重複した整数値が存在しないという点で Sudoku に似ています。
新しい行ごとに作成された配列リストからの数値で 2D 配列を埋めようとしています。配列リストから取得した数値が、その行と列内の数値と一致しないかどうかを確認します。
コードを実行すると、リストから整数値を削除しようとすると、「Index Out Of Bounds」例外が発生します。正しい要素を取得していると思うので、なぜこれが起こっているのかわかりません。
これが私のコードです:
int GRID_SIZE = 4;
int[][] grid = new int[GRID_SIZE][GRID_SIZE];
List<Integer> nums = new ArrayList<Integer>();
private void populateGrid() {
for (int row = 0; row < GRID_SIZE; row ++) {
// Creates an array of values from 1 to grid size.
for (int i = 1; i <= GRID_SIZE; i++) nums.add(i);
for (int col = 0; col < GRID_SIZE; col++) {
while (nums.size() > 0) {
// Gets a random number from the Array List
int ranNum = nums.get(numGen.nextInt(GRID_SIZE));
// Checks to see if the number is placeable.
if (canPlace(ranNum, row, col)) {
// Places the number in the 2D Array
grid[row][col] = ranNum;
break;
} else {
// Removes duplicate element from the Array List.
nums.remove(ranNum); <------{Index Out Of Bounds Exception]
}
}
}
}
}
private boolean canPlace(int ranNum, int row, int col) {
for (int i = 0; i < GRID_SIZE; i++) {
// Checks if the specified number is already in the row/column.
if (grid[col][i] == ranNum) return false;
if (grid[i][row] == ranNum) return false;
}
return true;
}
これについていくつか質問があります。
まず、なぜ私はエラーが発生するのですか?
次に、グリッドに 2D 配列を使用するよりも優れたものと、数字を配置する方法はありますか?
最後に、ブレークを正しく使用していますか?
ご回答ありがとうございます。