java - 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();
}
当
我到达第一个元素时,任何人都可以给出一个想法或解决方案,让我回到问题库数组中的最后一个元素。
解决方案
您正在访问索引。因此,将您的代码更改为:
if(mCurrentIndex == 0){
mCurrentIndex = mCurrentIndex + mQuestionBank.length;
updateQuestion();
}
至:
if(mCurrentIndex == 0){
mCurrentIndex = mCurrentIndex + mQuestionBank.length-1;
updateQuestion();
}
推荐阅读
- javascript - 是否可以仅为特定 div 加载辅助功能扩展
- python - Bs4 选择器:使用 Beautiful Soup 刮掉亚马逊
- java - 如何打印一组括号和表达式的所有可能组合,以便以后对其进行评估?
- string - 如何在一行中使用 AND 搜索两个字符串的出现
- ios - 如何使用 Swift 在 iOS 中缓存从 Web 服务获取的特定时间的数据?
- c# - 使用 TCP 打开端口,然后读取和写入它们 C#
- compare - Gitlab 分支/标签从低版本到更新版本的比较
- swift - 收到错误消息“[CAMetalLayerDrawable texture] 不应在已经呈现此可绘制对象后调用。改为获取 nextDrawable。”
- android - Backstack 异常 ScrollView 只能承载一个直接子级
- javascript - 设置角管的默认参数