2013-09-22 64 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;

相關問題