【问题标题】:Index out of bounds exception in homework作业中的索引越界异常
【发布时间】:2012-11-18 07:33:52
【问题描述】:

我正在尝试做家庭作业。我必须使用动态编程来显示下一个要移动的人是否处于赢/输状态。我不需要解决实际问题的帮助,我需要帮助解决索引越界异常,这让我感到困惑。我只在这里粘贴我的部分代码,因为我只需要查看 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 &lt; xif(primeArray[k] == false 行中的越界异常索引就会消失,但这是不正确的。 (但是第二个minimum = dynaProgram[newRowNumber][columnNumber] 的错误并没有消失。)

所有这些代码都在一个嵌套的 for 循环中,它遍历表中的行和列来填充它们。如果我删除上面的代码并只输入 dynaProgram[rowNumber][columnNumber] = 1 我没有问题,所以我没有'不相信这是问题所在。

【问题讨论】:

  • 我建议你,调试代码并阻止异常
  • 是的,尝试在Eclipse下用Debugger运行代码。
  • 我的第一个猜测是未显示的外部循环将 x 从 1 循环到 x
  • 我想通了。如果您有兴趣,请参阅我对下面回复的人的评论,看看问题是什么。谢谢您的帮助。我很感激。

标签: java exception indexoutofboundsexception


【解决方案1】:

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

int[] fred = new int[5];

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

所以当做类似的事情时:

    if(primeArray[i]== true){

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

【讨论】:

  • 哇,是的。我犯了一个愚蠢的错误。所以第一次不是问题,而是第二次是因为不同的循环在 if...else 语句中。它不检查 if(primeArray[i] = true) 的 i=x 因为 i 是一个合数 if i=x ,所以它运行 else 部分。如果 x 是一个素数,我会在相反的循环中得到一个错误。这是漫长的一天。刚刚做了一个 3 小时的练习 putman 考试。我想我要休息一晚了,大声笑。谢谢。
  • 对不起,还没有 15 声望。我刚加入,所以我还不能给你的 cmets 打分。>
猜你喜欢
  • 1970-01-01
  • 2018-11-19
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多