目标:用户答完全部题后,显示一个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";
注:自学专用,有问题欢迎一起探讨