首页 > 解决方案 > ArrayIndexOutOfBoundsException 当倒数到第一个元素然后回到最后一个

问题描述

我正在使用一个移动到 android 中的上一个问题的按钮,当向后迭代以到达第一个元素时,我实现了一个类似 5 个元素的数组的问题库,我需要返回到最后一个元素但得到一个错误 java.lang。 ArrayIndexOutOfBoundsException:长度=5;指数=5。

public class MainActivity extends AppCompatActivity {                                          
private Button mTrueButton;                                                                
private Button mFalseButton;                                                               
private ImageButton mNextButton;                                                           
private ImageButton mBackButton;                                                           
private TextView mQuestionTextView;                                                        

private TrueFalse[] mQuestionBank = new TrueFalse[] {                                      
        new TrueFalse(R.string.question_oceans, true),                                     
        new TrueFalse(R.string.question_mideast, false),                                   
        new TrueFalse(R.string.question_africa, false),                                    
        new TrueFalse(R.string.question_americas, true),                                   
        new TrueFalse(R.string.question_asia, true),                                       
};                                                                                         

private int mCurrentIndex = 0;                                                             

private void updateQuestion() {                                                            
    int question = mQuestionBank[mCurrentIndex].getmQuestion();                            
    mQuestionTextView.setText(question);                                                   
}                                                                                          

public void checkAnswer(boolean userPressedTrue){                                          
    boolean answerIsTrue = mQuestionBank[mCurrentIndex].ismTrueQuestion();                 

    int messageResId = 0;                                                                  

    if (userPressedTrue == answerIsTrue){                                                  
        messageResId = R.string.correct_toast;                                             
    } else {                                                                               
        messageResId = R.string.incorrect_toast;                                           
    }                                                                                      

    Toast.makeText(this, messageResId, Toast.LENGTH_SHORT).show();                         
}                                                                                          

@Override                                                                                  
protected void onCreate(Bundle savedInstanceState) {                                       
    super.onCreate(savedInstanceState);                                                    
    setContentView(R.layout.activity_main);                                                

    mQuestionTextView = (TextView) findViewById(R.id.question_text_view);                                                                  

    mTrueButton = (Button) findViewById(R.id.true_button);                                 

    mTrueButton.setOnClickListener(new View.OnClickListener() {                            
        @Override                                                                          
        public void onClick(View v) {                                                      
            checkAnswer(true);                                                             
        }                                                                                  
    });                                                                                    

    mFalseButton = findViewById(R.id.false_button);                                        

    mFalseButton.setOnClickListener(new View.OnClickListener() {                           
        @Override                                                                          
        public void onClick(View v) {                                                      
            checkAnswer(false);                                                            
        }                                                                                  
    });                                                                                    

    mQuestionTextView.setOnClickListener(new View.OnClickListener() {                      
        @Override                                                                          
        public void onClick(View v) {                                                      
            mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;                    
            updateQuestion();                                                              
        }                                                                                  
    });                                                                                    

    mNextButton = (ImageButton) findViewById(R.id.next_button);                            
    mNextButton.setOnClickListener(new View.OnClickListener() {                            
        @Override                                                                          
        public void onClick(View v) {                                                      
            mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;                                                           
            updateQuestion();                                                              
        }                                                                                  
    });                                                                                    

    mBackButton = (ImageButton) findViewById(R.id.back_button);                            
    mBackButton.setOnClickListener(new View.OnClickListener() {                            
        @Override                                                                          
        public void onClick(View v) {                                                      
            // Here I get an error getting back to the previous question                   
            if(mCurrentIndex == 0){                                                        
                mCurrentIndex = mCurrentIndex + mQuestionBank.length;                      
                updateQuestion();                                                          
            } else {                                                                       
                mCurrentIndex = (mCurrentIndex - 1) % mQuestionBank.length;                
                updateQuestion();                                                          
            }                                                                              
        }                                                                                  
    });                                                                                    
    updateQuestion();                                                                      
}                                                                                          


我到达第一个元素时,任何人都可以给出一个想法或解决方案,让我回到问题库数组中的最后一个元素。

标签: javaandroidarrays

解决方案


您正在访问索引。因此,将您的代码更改为:

if(mCurrentIndex == 0){                                                      
    mCurrentIndex = mCurrentIndex + mQuestionBank.length;                      
    updateQuestion();                                                          
}            

至:

if(mCurrentIndex == 0){                                                      
    mCurrentIndex = mCurrentIndex + mQuestionBank.length-1;                      
    updateQuestion();                                                          
}

推荐阅读