java中的java.lang.ArrayIndexOutOfBoundsException错误

时间:2013-09-22 06:39:52

标签: java

所以基本上,我已经创建了一个contains方法,它打印出我需要的正确输出但是在它执行此操作后它给了我一个错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at MethodTesting.main(MethodTesting.java:90)

不确定为什么它显示输出时不用担心?如果有人能让我知道我做错了什么?我的代码在下面,我已经尝试将长度调整为长度和长度-1,如下所示。我已经用字符串编写代码而不是char数组,但它不会给我正确的结果。希望有人可以解决一些问题吗?

        //contains method
    char[] st = "Hello World".toCharArray();
    char[] substr = "llo".toCharArray();
    for(int contains=0; contains<st.length-1; contains++){
        if(substr[contains] == st[contains]){
            for(int j=contains; j<st.length-1; j++){
                if(st[j] == substr[j]){
                }
                else{
                    contains = -1;
                }
            }
        }
        System.out.println("CONTAINS");
        System.out.println(contains);
    }

先谢谢!

3 个答案:

答案 0 :(得分:1)

假设您正在尝试搜索字符串的子字符串,可以使用String.contains()方法完成此操作。如果您尝试自己实现该方法,则必须更改代码:

public static void main (String[] args) 
{
    char[] st = "Hello World".toCharArray();
    char[] substr = "llo".toCharArray();

    for(int contains = 0; contains < st.length - substr.length; contains++) {
        int j;
        for(j = 0; j < substr.length; j++) {
            if(st[contains + j] != substr[j]) {    // mismatch    
                break;
            }
        }
        if (j == substr.length)   // Every character in substr has been matched
           System.out.println("Contains");
    }
}

答案 1 :(得分:0)

你的数组长度不一样,但在你的第二个循环中,你假设它们是。 contains可以是高于substr.length的值,因此j也是如此。

为了确保在迭代时不要关闭数组,请在第二个循环中修复边界。

for(int j=contains; j<st.length-1; j++)更改为for(int j=contains; j<substr.length; j++)。这将确保您的第二个循环永远不会执行contains > substr.length,而它的执行时间与j < st.length()-1一样长。

答案 2 :(得分:0)

st数组长度和substr长度不同。所以这一行 j<st.length-1;应为j<substr.length-1;