2013-09-22 67 views
-2

所以基本上,我创建了一个包含方法,它打印出正确的输出,我需要,但它确实在这之后它给了我一个错误:java.lang.ArrayIndexOutOfBoundsException错误在Java

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

不知道为什么当它显示输出时无后顾之忧?如果任何人都可以给我一个我在做什么错的想法?我的代码在下面,我试着将长度调整为length和length-1,如下所示。我已经写了字符串代码,而不是字符数组,但它不会给我正确的结果。希望有人可以摆脱一些光?

 //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); 
    } 

谢谢,提前!

+0

你究竟想要做什么? –

+0

'if(substr [contains] == st [contains])'这一行导致问题。在你的例子中'substr'的​​大小为2,但'contains'索引可以大到10. –

+0

看起来像通过设置contains = -1,行if(substr [contains] == st [contains])将会失败,因为它会尝试引用substr [-1] – vigneshre

回答

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"); 
    } 
} 
+0

嗯,它不再给我的错误,但你建议@RafiKamal现在创建一个无限循环,不打印的变化。也不应该把第二个if语句放在其他地方,因为它似乎并没有在那个位置拿起变量j? –

+0

@EvangelineSlape我已经用小的修改粘贴了完整的代码。 –

+0

非常感谢@RafiKamal的工作!整天试图让它开始工作,一直在绞尽脑汁! –

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

+0

谢谢,@Makoto唯一的问题是现在它按照0,1,2的顺序打印,就好像它每次打印contains变量时都打印一样。 –

0
st

数组长度和substr长度different.So线 j<st.length-1;j<substr.length-1;

相关问题