Ken Ken 퍼즐을 만드는 프로젝트를 시작했습니다. Ken Ken이 무엇인지 잘 모르는 경우 Sudoku와 비슷하게 행이나 열에 중복 된 정수 값을 사용할 수 없습니다.무작위로 된 숫자로 2D 배열 채우기
모든 새로운 행에 대해 생성 된 배열 목록의 숫자로 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;
}
: 여기
내 코드 모두의첫째, 가 왜 오류를 얻고을 그 나는입니까?
둘째 더 나은 아무것도 그리드에 대한 2 차원 배열과 내 번호를 배치하는 방식보다이 사용할 수 있나요?
마지막으로 나는 정확하게 휴식 시간을 사용하고 있습니다.?
미리 답변 해 주셔서 감사합니다.
이 루프의 두 번째 잘못된 것 같다 '내가 <= GRID_SIZE' 당신은 임의의 숫자 목록을 저장하기 위해 사용하는 정확한 어떤 데이터 유형 – Keppil
? 목록 일 경우 항목을 제거하면 축소 될 가능성이 큽니다. 따라서 목록에 9 개가 있고 그 중 하나를 찾아 제거하면 이제 8 개가 생깁니다. 다시 9 번째 위치를 보려고하면 범위를 벗어납니다. 예외 –
나는 어디에서 시작해야할지 정말로 모른다. 사소한 문제가 해결 되더라도 전체 접근법이 잘못되어 가장 어려운 문제를 해결할 수 없습니다. 역 추적이 필요합니다. –