Android编程权威指南3.8挑战练习:评分

目标:用户答完全部题后,显示一个toast消息,给出百分比形式的评分

分析:在用户没有答完题之前,不会显示toast消息,给出百分比形式的评分。用户答完题之后,会显示toast消息。因此应该先写一个showPercentage()方法,这个方法在没答完题之前,不会展示百分比评分,在答完题之后,会显示百分比评分。因此这个方法应该先判断是否答完题。如下:

 //显示百分比评分
    private void showPercentage() {
        //是否都被回答
        boolean allAnswered = true;
        //遍历所有问题
        for (int i = 0; i < mQuestionBank.length; i++) {
            //判断是否作答
            //如果有问题没有作答,直接退出该方法
            if (mQuestionBank[i].isAnswered() == false) {
                allAnswered = false;
                break;
            }
        }
    }

如果都答完,则输出百分比评分。那么百分比评分有两个要素。正确的个数和总个数,总个数很好获取mQuestionBank.length,那么正确的个数如何获取呢?
1、创建成员变量,用来记录正确的个数。

    private int userAnsweredCorrect = 0;

2、在checkAnswer(boolean userPressedTrue)中如果正确,则自增1。

//检查选择答案与正确答案是否相等
    private void checkAnswer(boolean userPressedTrue) {

        boolean answerIsTrue = mQuestionBank[mCurrentIndex].isAnswerTrue();

        int messageResId = 0;

        if (userPressedTrue == answerIsTrue) {
            messageResId = R.string.correct_toast;
            //如果答对则记录答对次数
            userAnsweredCorrect++;
        } else {
            messageResId = R.string.incorrect_toast;
        }

        mQuestionBank[mCurrentIndex].setAnswered(true);
        checkIfAnswered();

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

    }

到此,就可以写完showPercentage()方法。

//显示百分比评分
    private void showPercentage() {
        //是否都被回答
        boolean allAnswered = true;
        //遍历所有问题
        for (int i = 0; i < mQuestionBank.length; i++) {
            //判断是否作答
            //如果有问题没有作答,直接退出该方法
            if (mQuestionBank[i].isAnswered() == false) {
                allAnswered = false;
                break;
            }
        }
            if (allAnswered == true){
                //百分比评分
                double correctMark = (double)userAnsweredCorrect/mQuestionBank.length;
                correctMark = (double)((int)(correctMark * 10000)/100.0);
                String text = "正确率" + String.valueOf(correctMark) + "%";
                Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
            }
    }

接着,这个方法应该在哪里使用呢?应该在所有的按钮中都添加,这样当答完所有题目之后我们可以第一时间知道正确率。

//判断为正确按钮
        mTrueButton = (Button) findViewById(R.id.true_button);
        mTrueButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkAnswer(true);
                showPercentage();
            }
        });

        //判断为错误按钮
        mFalseButton = (Button) findViewById(R.id.false_button);
        mFalseButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                checkAnswer(false);
                showPercentage();
            }
        });

        //下一个问题按钮
        mNextButton = (Button) findViewById(R.id.next_button);
        mNextButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                    mCurrentIndex = (mCurrentIndex + 1) % mQuestionBank.length;
                    updateQuestion();
                    checkIfAnswered();
                    showPercentage();
            }
        });
    }

最后处理一下保存数据防止活动重建丢失数据的情况。

@Override
    protected void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt(KEY_CORRECT, userAnsweredCorrect);
    }
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (savedInstanceState != null) {
        userAnsweredCorrect = savedInstanceState.getInt(KEY_CORRECT);
        }
   }

注意:这里面的KEY_CORRECT应该在常量声明位置声明。

private static final String KEY_CORRECT = "correct";

注:自学专用,有问题欢迎一起探讨

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值