-7

有人可以帮助我了解越界异常发生在哪里。编译器说它在这里if(content[i] == delSub[j])并且超出了 5 的范围。这真的是它发生的地方吗?如果是,为什么?

char[] content = new char []{'A','B','C','D','E','F','G'};
//SubString = BCDEF
public int deleteSubString(String delSubString) 
{
    int count = 0;
    char[] delSub = new char[delSubString.length()];
    String temp = "";
    for(int i = 0; i < content.length;i++)
    {
        for (int j = 0; i < delSub.length;j++)
        {
                if(content[i] == delSub[j])
                {
                temp = temp + content[i];
                }
        }
    }


    return 0;
    //TODO configure return statement conditions

}
4

4 回答 4

2

您可能已经超出 delSub[j] 的边界 - 因为您在内部循环中的条件检查的是值i而不是j

于 2013-09-15T03:32:31.670 回答
1
for (int j = 0; i < delSub.length;j++)

应该:

for (int j = 0; j < delSub.length;j++)

(注意“j <”而不是“i <”)

于 2013-09-15T03:32:23.843 回答
1

我猜你需要使用 j 来匹配 (int j = 0; i < delSub.length;j++)

于 2013-09-15T03:34:19.483 回答
0

我将只解决问题的这一部分。

......真的是它发生的地方......

是的。这是。(有关解释,请参见其他答案...)

但更重要的是,没有充分的理由怀疑这就是它正在发生的地方,除非:

  • 您已经塞满了,并且您正在查看的源代码与您正在运行的代码不匹配,或者

  • 有一个 JVM 错误导致它获取不正确的行号。而且没有。Sun / Oracle JVM 在堆栈跟踪中提供可靠的行号......只要我记得。

简而言之 - 相信堆栈跟踪中的证据。

于 2013-09-15T04:01:01.730 回答