2012-01-19 3 views
0

나는 일부 사용자 나에게 오류를 보내 내 응용 프로그램이상한 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]; 

, 응용 프로그램은 저장하고 나중에 데이터를 이런 식으로로드 : 그것은

편집을 GOE 곳

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"); 
      ...  

     }    
    } 
} 

사람이 볼 수 있습니까를 전체 루프

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 =를 ..... -> "대답" 루프가 공백 문자와 문자로 나뉘거나 문자가 아직 추측되지 않은 경우 _ ex. ANS _ E _

편집 : 은 내가 오류를 발견 한 것 같아요 : 타 스레드가 다른 값으로 단어를 재 할당 할 수 있으며, 루프는 길이의 값 전에 호출 된 경우 다음 변경하는 동안 스레드는 루프를 호출했다 오류가 있습니다. 나는 지금 희망이 있습니다이

 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

explenation을 추가하면 희망을 이해합니다. – user1104939

+0

첫 번째 예에서는 'i <길이 * 2'이고 다른 i (길이 -1) * 2는 하나를 사용하고 있습니까? 그리고 또 하나의 질문은'length == word.length'입니까? – tidbeck

답변

2

이 루프를 잊어 고정. 그냥 스플릿을 사용하십시오 :

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

이렇게하면 단어가 공백이나 밑줄로 단어 배열에 침입합니다.

+0

이지만 word.length는 색인 범위 여야합니다. 아니요? – user1104939

+0

루프의 의도가 무엇인지 설명 한 후에 내 대답이 변경되었습니다. 아직도 당신이 타이핑 한 것에서 명확한 그림을 가지고 있지 않습니다. – chubbsondubs

+0

나의 나쁜 묘사에 죄송합니다, 영어는 제 모국어가 아닙니다. 응용 프로그램은 행맨입니다 - 단어 : 플레이어가 추측해야하는 단어가 들어 있습니다. 모든 색인은 1 자입니다. -charsLeft : 플레이어가 해당 문자를 추측 한 경우 1입니다. -Temp : 추정치가 아닌 문자를 공백으로 나눈 "_" – user1104939

관련 문제