测验APP上下一题按钮逻辑问题求助(附错误代码)
修复测验APP上下题按钮的逻辑问题
看起来你的按钮逻辑里有几个关键错误导致功能失效,我来帮你梳理并修正:
原代码的问题分析
下一题按钮(Next):
- 点击时直接将
mCurreentIndex设为0,完全不符合“下一题”的逻辑,应该是mCurreentIndex++ - 判断是否到达最后一题的条件错误:
mCurreentIndex > mQuestionBank.length永远不会成立,因为数组索引从0开始,最后一个索引是mQuestionBank.length - 1,正确判断应该是索引超过这个值时触发提示 - 逻辑顺序颠倒:应该先更新索引,再判断是否越界,越界时要回退索引并提示,否则更新题目
- 点击时直接将
上一题按钮(Previous):
- 判断是否到达第一题的条件错误:
mCurreentIndex < mQuestionBank.length几乎总是成立,正确判断应该是mCurreentIndex < 0(第一题索引是0,减1后变成-1就越界了) - 逻辑顺序有问题:减索引后如果越界,需要修正索引并提示,否则再更新题目
- 判断是否到达第一题的条件错误:
修正后的完整代码
// 下一题按钮逻辑 mNextButton = (Button) findViewById(R.id.next_button); mNextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 先尝试将索引加1 mCurreentIndex++; // 判断是否超过最后一题的索引(数组长度-1) if (mCurreentIndex >= mQuestionBank.length) { // 回退到最后一题的索引,避免数组越界 mCurreentIndex = mQuestionBank.length - 1; Toast.makeText(QuizActivity.this, R.string.last_question, Toast.LENGTH_LONG).show(); } else { // 正常切换到下一题 updateQuestion(); } } }); // 上一题按钮逻辑 mPreviousButton = (Button) findViewById(R.id.previous_button); mPreviousButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 先尝试将索引减1 mCurreentIndex--; // 判断是否小于第一题的索引(0) if (mCurreentIndex < 0) { // 修正回第一题的索引 mCurreentIndex = 0; Toast.makeText(QuizActivity.this, R.string.first_question, Toast.LENGTH_LONG).show(); } else { // 正常切换到上一题 updateQuestion(); } } });
额外优化建议
- 注意变量名拼写:你代码里的
mCurreentIndex多写了一个r,正确的应该是mCurrentIndex,建议修正避免后续混淆 - 如果想要更严谨直观的逻辑,可以先判断当前索引是否已经是边界,再决定是否更新索引,这样能彻底避免索引越界的情况:
// 下一题按钮的优化写法(先判断边界) mNextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mCurrentIndex == mQuestionBank.length - 1) { Toast.makeText(QuizActivity.this, R.string.last_question, Toast.LENGTH_LONG).show(); } else { mCurrentIndex++; updateQuestion(); } } }); // 上一题按钮的优化写法(先判断边界) mPreviousButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mCurrentIndex == 0) { Toast.makeText(QuizActivity.this, R.string.first_question, Toast.LENGTH_LONG).show(); } else { mCurrentIndex--; updateQuestion(); } } });
内容的提问来源于stack exchange,提问作者Ibrokhim Isroilov
相关产品推荐
相关产品推荐

