奇怪的java.lang.ArrayIndexOutOfBoundsException

时间:2012-01-19 17:12:33

标签: android

我的申请中有一个奇怪的问题

有些用户向我发送错误:

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

        }            
     }
}

有没有人知道它在哪里

EDIT 完整循环

 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 .....          - &gt; “中回答” 循环在空格和字母中转移单词,或者如果字母没有被猜到_ 恩。 a n s _ e _

编辑: 我想我发现了错误: 一个线程正在调用循环,而另一个线程可以将word重新分配给另一个值,如果在更改length的值之前调用了循环,则会出现错误。 我把循环改为了这个

     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 个答案:

答案 0 :(得分:2)

忘掉你的循环,如果你想做的就是用空格或空格划分单词。只使用拆分:

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

这会将单词吐成空格或下划线上的单词数组。