Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组错误(不超出范围)_Java_Arrays_Indexoutofboundsexception - Fatal编程技术网

Java数组错误(不超出范围)

Java数组错误(不超出范围),java,arrays,indexoutofboundsexception,Java,Arrays,Indexoutofboundsexception,我正在通过Codefights网站研究Java。以下是练习: 成名后,CodeBots决定搬到一栋新的大楼一起生活。该建筑由一个矩形矩阵表示 房间,每个单元格包含一个整数-房间的价格。一些 房间是免费的(他们的费用是零),但这可能是因为他们是免费的 闹鬼,所以所有的机器人都害怕他们。这就是为什么任何房间 是免费的或位于同一列中免费房间下方的任何位置 不适合机器人。帮助机器人计算 所有适合他们的房间的总价。例子: 为了 输出应为matrixElementsSum(矩阵)=9。这是标有“x”的不合适

我正在通过Codefights网站研究Java。以下是练习:

成名后,CodeBots决定搬到一栋新的大楼一起生活。该建筑由一个矩形矩阵表示 房间,每个单元格包含一个整数-房间的价格。一些 房间是免费的(他们的费用是零),但这可能是因为他们是免费的 闹鬼,所以所有的机器人都害怕他们。这就是为什么任何房间 是免费的或位于同一列中免费房间下方的任何位置 不适合机器人。帮助机器人计算 所有适合他们的房间的总价。例子: 为了

输出应为
matrixElementsSum(矩阵)=9
。这是标有“x”的不合适房间的房间矩阵:

[[x, 1, 1, 2],
 [x, 5, x, x],
 [x, x, x, x]]
因此,答案是1+5+1+2=9

我知道我必须遍历数组的所有元素,这很容易。我挂起的部分是检查数组中当前元素上方的“0”房间。我知道该位置将是矩阵[I-1][j],其中数组中的当前位置是矩阵[I][j]。但是,当我尝试实现它时,我得到了一个错误“InvocationTargetExeption”

我的假设是,我要求在数组地址中使用负数,但我不确定如何解决这个问题。这是我的密码:

int matrixElementsSum(int[][] matrix) {
    int sum = 0;
    for(int i = 0; i < matrix.length; i++){
        for(int j = 0; j < matrix[i].length; j++){
            if(matrix[i-1][j]==0){ sum += 0;}   
            else{sum += matrix[i][j];}
                }
        }
    return sum;
}
int matrixelementsum(int[][]矩阵){
整数和=0;
对于(int i=0;i
这是一个
阵列索引边界外异常
,您可以通过替换以下内容来修复它:

if(matrix[i-1][j]==0){ sum += 0;}
与:

你得到它是因为你试图访问:
matrix[i-1][j]
当i=0时,i-1=-1

在您提供的示例中,在矩阵上运行固定代码会按预期返回9

我能想到的唯一原因是,您看到的是
InvocationTargetException
是如果您使用反射调用
matrixElementsSum
:然后该方法抛出一个
ArrayIndexOutOfBoundsException
,它由
InvocationTargetException
包装

Method.java
docstring:

* @exception InvocationTargetException if the underlying method
*              throws an exception.

它仍然可能是一个AIOOBE。您需要检查stacktrace的其余部分(并在此处发布)。我从0开始,在if语句中使用i-1,因此当i=0时,您使用i==0调用矩阵[-1],您尝试访问导致异常的if语句中的
matrix[-1]
。如何调用此代码?似乎有一些框架围绕着这一点。例外情况应该以“引起的”继续,并且迟早应该有一个ArrayIndexOutOfBoundsException或类似的东西哦,太好了!and语句意味着,如果i为负,则即使地址为负,矩阵也不会被引用,因此没有例外。我很感谢你的帮助,但是现在我们该怎么办呢?我们还必须评估上面的房间。这意味着如果我仅仅是1,就会抛出相同的异常,因为1-2仍然是负数。我正在考虑另一个if语句,使用i>1和[i-2]嵌套在第一个if?中,再次感谢您的帮助。第二个if语句有效。代码战的一个诡辩之处是,在解决问题之前,你看不到任何解决方案。我想这是有道理的,但有时我想,陷入困境是否比看到一个好的答案并在继续之前消化它更有效率。另一方面,有时你在研究中得到的实践和实践编码一样有价值。谢谢大家!o7
if(i > 0 && matrix[i-1][j]==0){ sum += 0;}
* @exception InvocationTargetException if the underlying method
*              throws an exception.