2013-07-02 62 views
0

下面是一個簡單的程序,用於搜索順序字符。但是,我收到一個異常,因爲我在數組索引之外進行搜索。我明白爲什麼會發生,但不確定如何管理此問題?我如何管理ArrayIndexOutOfBounds

public static void main(String [] args) 
    { 
     String term = "Popeye's fishCat"; 
     String query = "P's SalmonCat"; 
     int score = 0; 

     char [] termChar = term.toCharArray(); 
     char [] queryChar = query.toCharArray(); 

     if((queryChar[0]) == (termChar[0])) 
     { 
      score++; 
     } 

     for(int i = 0; i < queryChar.length; i++) 
     { 
      for(int j = 0; j < termChar.length; j++) 
      { 
       if(queryChar[i] == termChar[j]) 
       { 
        if((queryChar[i + 1]) == (termChar[j + 1])) //Causes an exception 
        { 
         System.out.println((queryChar[i + 1]) + " " + (termChar[j + 1])); 
         score++; 
         break; 
        } 
       } 
      } 
     } 

     System.out.println(score); 
    } 
+0

實際上你想要做什麼:S – stinepike

+0

你正在以'length'結尾的循環中添加一個,並且想知道爲什麼它出來了邊界? –

+0

你試圖找到兩個字符串中存在的總數或字符嗎? – Akash

回答

9

調整你的循環條件:

for(int i = 0; i < queryChar.length - 1; i++) { 
      for(int j = 0; j < termChar.length - 1; j++) 

注意添加-1

如果你總是看下一個項目在循環,你不能循環到最後一個項目,因爲它沒有下一個項目。

+0

啊謝謝。我試圖檢查這些值是否爲空,但沒有喜悅。很簡單。 – Calgar99

0

只是刪除我1或j + 1中該位

if((queryChar[i + 1]) == (termChar[j + 1])){ 
    System.out.println((queryChar[i + 1]) + " " + (termChar[j + 1])); 
    score++; 
    break; 

} 作爲legnth返回數組的大小,所述第一元件計數爲1,但是從數組中取得的元件的情況下,首先標記爲零。使用長度-1(該循環中的最高可能值,如當i =長度循環停止時),然後加1,嘗試引用不存在的數組[length]。因爲它從零開始,所以最後一個元素是數組[length-1]