我有一個奇怪的問題,在我的應用奇怪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];
現在,讓我們希望它的固定
該循環嚴重困擾着我。你能讓它更容易理解嗎? – Jivings
添加完美,希望你明白:) – user1104939
在第一個例子中,你有'我<長* 2',在另一個'我<(長-1)* 2'你正在使用哪一個?還有一個問題,是'length == word.length'? – tidbeck