2012-01-19 64 views
0

我有一個奇怪的問題,在我的應用奇怪java.lang.ArrayIndexOutOfBoundsException

有些用戶發送我的錯誤:

java.lang.ArrayIndexOutOfBoundsException 

我自己,從來沒有經歷過的錯誤。下面是代碼:

  for(int i =0; i<length*2; i+=2) { 
      if(charsLeft[i/2]==1) 
       temp[i]=word[i/2];//IT HAPPENS HERE 
     .... 

     length = word.length;   
     charsLeft = new int[length]; 
     temp = new String[length*2]; 

當用戶返回到主屏幕,應用程序保存和後加載的數據是這樣的:

public Bundle saveState(Bundle bundle) { 
    synchronized (surfaceHolder) { 
     if (bundle != null) { 
      bundle.putStringArray("word",game.word.word); 
      bundle.putIntArray("charsLeft",game.word.charsLeft); 
      bundle.putInt("length",game.word.word().length()); 
      bundle.putStringArray("temp",game.word.temp); 
      bundle.putCharArray("characters", game.word.characters); 
      ...      
     } 
    } 
    return bundle; 
} 
public synchronized void restoreState(Bundle bundle) { 
    synchronized (surfaceHolder) { 
     mPaused = true; 
     if (bundle != null) {  
      game.word.word = bundle.getStringArray("word"); 
      game.word.length = bundle.getInt("length"); 
      game.word.init(); 
      game.word.charsLeft = bundle.getIntArray("charsLeft");    
      game.word.temp = bundle.getStringArray("temp"); 
      game.word.characters = bundle.getCharArray("characters"); 
      ...  

     }    
    } 
} 

有誰看到它GOE

編輯 全迴路

for(int i =0; i<(length)*2; i+=2) { 
      if(charsLeft[i/2]==1) 
       temp[i]=word[i/2]; 
      else 
       temp[i]="_"; 
      temp[i+1]=" "; 
      }  

實施例字[0] =一個字[1] = N ..... - >「answer」 循環將空格和字母中的單詞分開,或者如果該字母不是由__前綴_ 前綴。我想我找到了錯誤: 一個線程正在調用循環,而另一個線程可以重新分配單詞到另一個值,並且如果該循環在長度的值被改變之前被調用,然後你有一個錯誤。 我改變了循環這個

 temp = new String[word.length*2]; 
    for(int i =0; i<(word.length*2); i+=2) { 
      if(charsLeft[i/2]==1) 
       temp[i]=word[i/2]; 

現在,讓我們希望它的固定

+1

該循環嚴重困擾着我。你能讓它更容易理解嗎? – Jivings

+1

添加完美,希望你明白:) – user1104939

+0

在第一個例子中,你有'我<長* 2',在另一個'我<(長-1)* 2'你正在使用哪一個?還有一個問題,是'length == word.length'? – tidbeck

回答

2

忘掉你的循環,如果你想要做的是有空格分割的單詞。只是使用分割:

String[] words = word.split("\s|_"); 

這將吐詞到一個空格或下劃線的單詞數組。

+0

但word.length應該是索引範圍,否? – user1104939

+0

在您解釋該循環的目的是什麼後,更改了我的答案。仍然不太清楚你輸入的內容。 – chubbsondubs

+0

對不起,我的母語不好。 該應用程序是一個hang子手 -word:包含玩家必須猜測的單詞,每個索引有1個字母。 -charsLeft:如果玩家猜對了那個字母,則爲1 -Temp:顯示猜謎字母,「_」表示未被空格的字母除以空格 – user1104939