2014-01-06 25 views
0
的ArrayIndexOutOfBounds我

已經得到了下面的Java代碼:的Java:

public void varsInvullen(String tempTekst){ 
     int i,aantalVraagtekens = 0; 
     String ingevuldeParameter; 

     for(i= 0; tempTekst.length() > i; i++){ 
      if(tempTekst.charAt(i) == '?'){ 
       aantalVraagtekens++; 
       System.out.println(aantalVraagtekens); 
       } 
      } 

     String[] variables1 = new String[aantalVraagtekens+1]; 
     String[] tempTekst2 = tempTekst.split("\\s+"); 

     for(i = 0; tempTekst2.length > i; i++){ 
      if(tempTekst2[i].charAt(0) == '?'){ 

       variables1[i] = tempTekst2[i]; 
       if(!variables1[i].equals("null")){ 
        System.out.println("Invoer voor parameter: "+variables1[i]+" >>>"); 
        ingevuldeParameter = Input.readString(); 

        tempTekst = tempTekst.replace(variables1[i],ingevuldeParameter); 
        i++; 
       } 
      } 
     } 

     System.out.println("De volledig ingevulde template:"); 
     System.out.println(tempTekst); 
    } 

我得到的錯誤是:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6 
     at Mailmatcher.varsInvullen(Mailmatcher.java:68) 
     at Mailmatcher.personaliseren(Mailmatcher.java:90) 
     at Mailmatcher.menu(Mailmatcher.java:29) 
     at Mailmatcher.main(Mailmatcher.java:131) 

我知道這個錯誤的意思是,我的數組是太小了,但它不是,因爲如果我在不同的地方玩System.out.println(variables1.length);,它總是顯示陣列是正確的大小..

不知道是否清楚我的意思,如果您需要額外的信息,只是問。

謝謝!

+0

哪條線恰好是線68?我覺得它可能與for循環中的'i ++;'有關。這真的應該在那裏嗎? – Sinkingpoint

+0

variables1 [i] = tempTekst2 [i]; – user3165926

回答

1

variables1具有等於問號在tempTekst + 1 tempTekst2數的長度是從分裂tempTekst製成的陣列在一個或多個空白字符上。然後循環使用tempTekst2的長度,該長度可能大於variables1,如果tempTekst的空白分隔的單詞比問號多。

例如,如果你輸入的字符串"Do we ? count ? only ? blue ? cars ?"那麼variables1長度將爲6 tempTekst2當使用長度你循環的tempTekst2你將循環11次會{"Do", "we", "?", "count", "?", "only", "?", "blue", "?", "cars", "?"}。所以當你打第一個問號時i將等於2.當你點擊最後一個問號時i將等於10.當你嘗試設置variables1[10] =無論輸入什麼文字,你會得到例外,因爲variables1的大小隻有6個。

+0

'與代碼相關的問題,我不認爲我得到你,你能更具體嗎? – user3165926

+0

只有在分割tempTekst時產生的「單詞」數小於或等於字符串中包含的問號數+ 1時,您的代碼才能正常工作。 –

+0

oooh,我現在看到,基本上意味着我的代碼將會從來不以這種方式工作:p我會看看它,並找到解決方案 – user3165926

-2

你想在for循環中使用length() - 1。爪哇列表/陣列零索引,以便而長度可能是X的最後一個元素是在X-1

+0

試過這個,給我同樣的錯誤 – user3165926

+0

檢查第二個循環,也是。中間情況看起來有點不可思議。另外,當放置堆棧跟蹤和代碼片段時,有助於確定跟蹤中的哪一行與代碼段中的哪一行相匹配,以便我們知道在哪裏查找。 – evanchooly

+0

在兩者上嘗試了長度爲1,但仍然是相同的結果,我將編輯我的文章 – user3165926