我正在尝试做家庭作业。我必须使用动态编程来显示下一个要移动的人是否处于赢/输状态。我不需要解决实际问题的帮助,我需要帮助解决索引越界异常,这让我感到困惑。我只在这里粘贴我的部分代码,因为我只需要查看 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 而不是 i。(for 循环是相同的)我没有在我的代码中的其他任何地方使用任何变量。我不知道为什么这会发生在一个而不是另一个。在这两种情况下,x 保持不变。
我还在第二个上得到一个索引越界异常minimum = dynaProgram[newRowNumber][columnNumber]
,而第一个没有遇到错误。我知道这可能是一个愚蠢的错误,但我无法弄清楚。如果我将'k' for 循环更改为行k < x
中出界异常的索引if(primeArray[k] == false
,那么它就会消失,但它是不正确的。(然而,第二个错误minimum = dynaProgram[newRowNumber][columnNumber]
并没有消失。)
所有这些代码都在一个嵌套的 for 循环中,它遍历表中的行和列来填充它们。如果我删除上面的代码并且只是把dynaProgram[rowNumber][columnNumber] = 1
我没有问题,所以我不相信这是问题。