繁体   English   中英

作业超出索引范围

[英]Index out of bounds exception in homework

我正在尝试做作业。 我必须使用动态编程来显示下一个要移动的人是否处于赢/输状态。 我不需要实际问题的帮助,我需要索引超出范围的异常的帮助,我对此感到困惑。 我只将部分代码粘贴到这里,因为我只需要查看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上获取索引超出范围的异常。这两者之间的唯一区别是使用了变量k我在for循环中(for循环是相同的)我没有在代码中的任何其他地方使用任何变量。我不知道为什么这会在一个而不是另一个中发生。在两种情况下,x保持相同的数字。

我还在第二个minimum = dynaProgram[newRowNumber][columnNumber]上获得了索引超出范围的异常,而第一个没有遇到错误。 我知道这可能是一个愚蠢的错误,但我无法弄清楚。 如果我将' if(primeArray[k] == false循环更改为k < x ,则if(primeArray[k] == false行消失了,但是那是不正确的(第二个minimum = dynaProgram[newRowNumber][columnNumber]不会消失。)

所有这些代码都在嵌套的for循环中,该循环遍历表中的行和列以填充它们。如果我删除了上面的代码,只是将dynaProgram[rowNumber][columnNumber] = 1放了dynaProgram[rowNumber][columnNumber] = 1 ,所以我不认为这是问题所在。

访问长度为5的数组时(例如)

int[] fred = new int[5];

第一个元素为fred[0] ,最后一个元素为fred[4]

所以当做这样的事情:

    if(primeArray[i]== true){

确保i小于数组长度。 使用等于数组长度的i值将引发异常。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM