当前位置: 首页 > 知识库问答 >
问题:

数组索引超出范围?怎样

吕作人
2023-03-14

你好,stackoverflow的好人们!我有一个奇怪的问题,我不明白。我要发布我的两个有问题的方法:

private static void resi(int [][] matrica,int row, int col) {
    if (matrica[row][col] != 0) {
        next(matrica,row, col); // <--- this the line that first throws the exception
    } else {
        for (int num = 1; num < 10; num++) {
            if (checkRow(matrica,row, num) && checkColumn(matrica,col, num) && checkBox(matrica,row, col, num)) {
                matrica2[row][col] = num;
                matrica4[row][col] = num;
                next(matrica,row, col);
            }
        }
        matrica[row][col] = 0;

    }
}

另一个:

 private static void next(int [][] matrica2,int row, int col) {
    if (col < 8) {
        resi(matrica2,row, col + 1);
    } else {
        resi(matrica2,row + 1, 0);
    }
}

所以,我正在根据我在网上找到的一些代码制作一个数独解算器。现在,当我试着调试程序时,我可以很好地检查一些行(并且它按照预期工作),但是一旦程序第一次在方法“resi”中调用“next”方法,它就会崩溃,出现数组索引越界异常。如果我只是尝试在不进行调试的情况下运行该程序,那么在同一方法调用的NetBeans的output选项卡中会出现大量“数组索引超出界限”异常。

我不知道是什么导致了这个错误。据我所知,row和co没有超过0-8范围...这一定是2D阵列的问题?谢谢你的时间。

编辑1:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 
at SudokuGame.Main.resi(Main.java:88)
    at SudokuGame.Main.next(Main.java:107)
    at SudokuGame.Main.resi(Main.java:89)
    at SudokuGame.Main.next(Main.java:105)
    at SudokuGame.Main.resi(Main.java:95)

... 等等,它们在重复,因为它似乎在遍历代码并不断抛出异常?

共有2个答案

狄信然
2023-03-14

Execption将准确地说明问题发生在哪一行。查看代码,我猜想在一些Next调用之后,第三行的resi方法(Next(matrica, row, co);)将抛出执行,因为它错过了行的一些验证。为了我们确保,粘贴在一些网站上的执行pastebin.com,并通知这里我们看到它=)

仲孙夕
2023-03-14

next()中,您一直在增加,但是没有像那样的故障安全索引越界检查,因此不能保证将超过8即9的值。

因此,在第行resi(矩阵2,第1行,0)中递增(第1行)之前,确保检查是否小于8

private static void next(int [][] matrica2,int row, int col) {
if (col  8) {
    resi(matrica2,row, col + 1);
} else if(row < 8) { // Make sure to increment row only if less than 8
    resi(matrica2,row + 1, 0);
} else {
    // Stop the application (May Be)
 }

}

 类似资料:
  • 问题内容: 我已经开始处理我的第一个Java程序,它是一个简单的计算器,但是我得到一个错误,声称我的数组超出范围。我尝试对其进行调试,以了解这样做的原因和原因,并遵循纸上的代码,两者均显示了我期望和期望的结果。因此,我看不到问题出在哪里。代码不完整。 根据调试器,此行出现错误: 这是我当前拥有的代码的主要部分: 这是我收到的错误消息: 问题答案: 当等于中的最后一个元素索引时,则将大于最后一个元素

  • 所以我创建了这个注释: 但当我运行它时,我得到了这个异常: 无法为映射设置参数:ParameterMapping{Property='name',mode=in,javatype=class java.lang.String,JDBCType=varchar,NumericScale=null,ResultMapid='null',JDBCTypeName='null',Expression='n

  • 问题内容: 我已经声明了我的数组 然后我初始化它的值像 在运行时,它给出错误“数组索引超出范围” 问题答案: 正如评论员@C_X和@MartinR所说,您的数组为空。这是根据需要初始化的方法… …当然,如果您只想零,那么循环现在是多余的!

  • 问题内容: 因此,我正在编写一个简单的程序来输入字符串并计算总数。的米 所以,这是我的代码 where 和str是我接受过的字符串,但是此错误不断出现 这是什么错误以及如何将其删除? 问题答案: 字符串,有效索引从0到n-1; 更改 至

  • 我有一个bean,我用它作为传输对象。bean的类定义为- 我正在使用这个bean,在带有Model属性注释的Spring控制器中。对于JSP,我有JSTL。我已经用这样的字段填充了JSP。 当我提交表单时,我得到Java . lang . indexoutofboundsexception:Index:0,Size: 0。

  • 问题内容: 我决定通过添加身份验证使用和数据库来修改我的应用程序。在使用XML 和XML 进行普通身份验证之前。工作正常。 我看起来像这样 但是当我尝试进行身份验证时,我遇到了异常 XML文件中的语法有什么问题? 问题答案: Spring Security希望用户查询按顺序列出三列: 用户名 密码 启用(布尔值) 你没有最后一个。如果您的数据库中没有等效的“启用”功能,则可以使用常量。