ArrayIndexOutOfBoundsException итерация по двумерным массивам в Java
Извините, этот вопрос не может быть применен к другим. Я смотрю на это пару часов и до сих пор не вижу. Это должно быть очень просто, но я не могу найти, где я пытаюсь получить доступ к тому, чего там нет. Я получаю
ArrayIndexOutOfBoundsException при итерации по сетке 9x9.
public ArrayList<Grid> next9Grids()
{
ArrayList<Grid> next9 = new ArrayList<Grid>();//list of new Grids
for(int i = 0; i < values.length; i++){
for(int j = 0; i < values[i].length; j++){
if (values[i][j] == 0){//if empty
for(int next = 1; next <= 9; next++){
Grid temp9 = new Grid(this);//need to make another grid for each #
temp9.values[i][j] = next; // changes value of empty space to 1->9
next9.add(temp9); //add grid to arrayList
}
return next9;
}
}
}
return null;
}
Исключение в потоке "main" java.lang.ArrayIndexOutOfBoundsException: 9 в sudoku.Grid.next9Grids(Grid.java:112) в sudoku.Solver.solveRecurse(Solver.java:54) в sudoku.Solver.solveRecurse (Solver.jpg):56) на судоку. Солвер.СольвеРекурс (Солвер.Ява:56)
Это источник ошибки.(Grid.java:112) это ----> if(values[i][j] ==0){
Другой вопрос: почему в строке 112 возникает ошибка, когда она получает доступ к чему-то, что второй цикл for сначала перебирает, а не второй цикл for?
Все очень ценится. Спасибо за ответ.
3 ответа
Попробуй это:
for(int i = 0; i < values.length; i++){
for(int j = 0; j < values[i].length; j++){// replaced j in (i < values[i].length) by i in (j < values[i].length)
if (values[i][j] == 0){//if empty
for(int next = 1; next <= 9; next++){
В шестой строке кода замените i на j
public ArrayList<Grid> next9Grids(){
ArrayList<Grid> next9 = new ArrayList<Grid>(); //list of new Grids
for(int i = 0; i < values.length; i++){
for(int j = 0; j < values[i].length; j++){ // The change is here
if (values[i][j] == 0){ //if empty
for(int next = 1; next <= 9; next++){
Grid temp9 = new Grid(this);//need to make another grid for each #
temp9.values[i][j] = next; // changes value of empty space to 1->9
next9.add(temp9); //add grid to arrayList
}
return next9;
}
}
}
return null;
}
Ваше состояние во вложенном forloop неверно. Так должно быть j
вместо i
public ArrayList<Grid> next9Grids()
{
ArrayList<Grid> next9 = new ArrayList<Grid>();//list of new Grids
for(int i = 0; i < values.length; i++){
for(int j = 0; j < values[i].length; j++){
if (values[i][j] == 0){//if empty
for(int next = 1; next <= 9; next++){
Grid temp9 = new Grid(this);//need to make another grid for each #
temp9.values[i][j] = next; // changes value of empty space to 1->9
next9.add(temp9); //add grid to arrayList
}
return next9;
}
}
}
return null;
}