我正在尝试做作业。我必须使用动态编程来显示下一个要移动的人是否处于赢/输状态。我不需要实际问题的帮助,我需要帮助索引超出范围异常我得到的困扰我。我只会在这里粘贴部分代码,因为我只需要查看for循环。我也不希望班上的任何人看到我的所有代码并复制它。如果您需要更多数据,请告诉我。所以这是代码:
if(primeArray[x] == true){
for(int i = 1; i <= x; i++){
if(primeArray[i]== true){
newRowNumber = x - i;
}
if(dynaProgram[newRowNumber][columnNumber] < minimum){
minimum = dynaProgram[newRowNumber][columnNumber];
}
}
}
//COMPOSITE CASE FOR X!
else{
for(int k = 1; k <= x; k++){
if((primeArray[k] == false)){
newRowNumber = x - k;
}
if(dynaProgram[newRowNumber][columnNumber] < minimum){
minimum = dynaProgram[newRowNumber][columnNumber];
}
}
由于某种原因,if(primeArray[i] == true
正确运行,但我在if(primeArray[k] == false
上获得了索引超出范围的异常。这两者之间的唯一区别是在for循环中使用变量k over i。(for循环是相同的)我没有在我的代码中的任何其他位置使用任何变量。我不知道为什么会发生这种情况而不是另一种情况。在这两种情况下,x都保持相同的数字。
我也在第二个minimum = dynaProgram[newRowNumber][columnNumber]
上获得索引超出范围的异常,而第一个没有遇到错误。我知道这可能是一个愚蠢的错误,但我无法弄清楚。如果我将'k'for循环更改为k < x
,则if(primeArray[k] == false
行中的out bounds异常索引会消失,但则不正确。 (然而,第二个minimum = dynaProgram[newRowNumber][columnNumber]
上的错误并没有消失。)
所有这些代码都在一个嵌套的for循环中,它循环遍历表中的行和列以填充它们。如果我删除上面的代码并且只是放dynaProgram[rowNumber][columnNumber] = 1
我没有问题,所以我不相信这是问题。
答案 0 :(得分:0)
访问长度为5的数组时(例如)
int[] fred = new int[5];
第一个元素是fred[0]
,最后一个元素是fred[4]
所以当做类似的事情时:
if(primeArray[i]== true){
确保i
小于数组长度。使用等于数组长度的i
值将引发异常。