Java 不确定为什么会发生越界异常
获取越界异常,但不了解原因。我的递归函数每次从数组列表中删除一个项时都会调用自己,直到其为空。一旦该行为空,则应填充该行,然后将值添加回列表。我认为在最后一个元素上,由于列表的长度,它抛出了一个异常,它不想删除最后一个元素。这有什么办法吗?有没有可能是另一个错误Java 不确定为什么会发生越界异常,java,debugging,arraylist,indexoutofboundsexception,Java,Debugging,Arraylist,Indexoutofboundsexception,获取越界异常,但不了解原因。我的递归函数每次从数组列表中删除一个项时都会调用自己,直到其为空。一旦该行为空,则应填充该行,然后将值添加回列表。我认为在最后一个元素上,由于列表的长度,它抛出了一个异常,它不想删除最后一个元素。这有什么办法吗?有没有可能是另一个错误 import java.util.Arrays; import java.util.Collections; import java.util.Random; import java.util.*; class Main { publ
import java.util.Arrays;
import java.util.Collections;
import java.util.Random;
import java.util.*;
class Main {
public static void main(String[] args) {
int[][]board=new int[9][9];
Solver solve = new Solver();
ArrayList<Integer> choices = new ArrayList<>();
choices.addAll(Arrays.asList(1,2,3,4,5,6,7,8,9));
Collections.shuffle(choices);
for(int i = 0; i < 9; i++){
for(int j=0; j < 9; j++) {
solve.fill(board, choices, i, j);
}
}
}
}
class Solver {
public void fill(int board[][], ArrayList<Integer> choices, int
row, int col) {
int num = choices.remove(0);
if (isValid(board, row, col, num) == false) {
fill(board, choices, row, col);
} else
board[row][col] = num;
return;
}
public boolean isValid(int board[][], int row, int col, int num) {
if (checkRow(board, row, col, num) == true)
/*checkCol(board, row, col, num) == true)*/
/*checkSqr(board, row, col, num) == true*/
return true;
return false;
}
public boolean checkRow(int board[][], int row, int col, int num) {
boolean valid = true;
int i = 0;
while (i < 9) {
if (board[i][col] == num) {
return valid = false;
}
i++;
}
return valid;
}
导入java.util.array;
导入java.util.Collections;
导入java.util.Random;
导入java.util.*;
班长{
公共静态void main(字符串[]args){
int[][]板=新int[9][9];
解算器解算=新解算器();
ArrayList选项=新建ArrayList();
addAll(Arrays.asList(1,2,3,4,5,6,7,8,9));
收藏。洗牌(选择);
对于(int i=0;i<9;i++){
对于(int j=0;j<9;j++){
求解.填充(板,选项,i,j);
}
}
}
}
类求解器{
公共空白填充(int板[][],阵列列表选项,int
行,整数列){
int num=choices.remove(0);
if(isValid(板、行、列、数)=false){
填充(板、选项、行、列);
}否则
板[行][列]=num;
返回;
}
公共布尔值是有效的(int board[],int row,int col,int num){
如果(检查行(线路板、行、列、数量)=真)
/*检查列(板、行、列、数)==真)*/
/*checkSqr(板、行、列、数)=真*/
返回true;
返回false;
}
公共布尔校验行(int BOUND[]],int row,int col,int num){
布尔有效=真;
int i=0;
而(i<9){
如果(板[i][col]==num){
返回valid=false;
}
i++;
}
返回有效;
}
预期结果将是根据数独规则随机填充board[][]。
相反,我们得到了
线程“main”java.lang.IndexOutOfBoundsException中的异常:
索引0超出长度0的界限
at Solver.fill(Solver.java:31)
在Main.Main(Solver.java:22)中,在调用
int num=choices.remove(0);
之前,请确保您仍然有一个元素
不相关的问题:如果同时导入
java.util
中的每一样东西,为什么要按名称导入Array
、Collections
和Random
?
if (choices.isEmpty()) {
return;
}
int num = choices.remove(0);