You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

测验APP上下一题按钮逻辑问题求助(附错误代码)

修复测验APP上下题按钮的逻辑问题

看起来你的按钮逻辑里有几个关键错误导致功能失效,我来帮你梳理并修正:

原代码的问题分析

  • 下一题按钮(Next):

    1. 点击时直接将 mCurreentIndex 设为0,完全不符合“下一题”的逻辑,应该是mCurreentIndex++
    2. 判断是否到达最后一题的条件错误:mCurreentIndex > mQuestionBank.length 永远不会成立,因为数组索引从0开始,最后一个索引是mQuestionBank.length - 1,正确判断应该是索引超过这个值时触发提示
    3. 逻辑顺序颠倒:应该先更新索引,再判断是否越界,越界时要回退索引并提示,否则更新题目
  • 上一题按钮(Previous):

    1. 判断是否到达第一题的条件错误:mCurreentIndex < mQuestionBank.length 几乎总是成立,正确判断应该是mCurreentIndex < 0(第一题索引是0,减1后变成-1就越界了)
    2. 逻辑顺序有问题:减索引后如果越界,需要修正索引并提示,否则再更新题目

修正后的完整代码

// 下一题按钮逻辑
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:55:34