2016-09-22 46 views
0

我在测验应用程序上显示正确分数时遇到问题 - 特别是与复选框。我有四个选择,但只有两个是正确的(B & C)。当选择了所有四个选项(不正确)时,它仍然会添加这些点。如何防止这种情况发生并正确得分这些复选框?有人知道吗?谢谢!使用CheckBox计算简单问答应用程序的正确分数

package com.example.android.quantummechanicsquiz; 

    import android.provider.MediaStore; 
    import android.support.v7.app.AppCompatActivity; 
    import android.os.Bundle; 
    import android.text.Editable; 
    import android.view.View; 
    import android.widget.CheckBox; 
    import android.widget.EditText; 
    import android.widget.RadioButton; 
    import android.widget.TextView; 
    import android.widget.Toast; 

    public class MainActivity extends AppCompatActivity { 

     int score = 0; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
     } 


     public void radioButtonClicked(View view) { 
      boolean checked = ((RadioButton) view).isChecked(); 

      switch (view.getId()) { 
       case R.id.radio_one_correct: 
        if (checked) break; 

       case R.id.radio_one_b: 
        if (checked) break; 

       case R.id.radio_one_c: 
        if (checked) break; 

       case R.id.radio_one_d: 
        if (checked) break; 

       case R.id.radio_two_a: 
        if (checked) break; 

       case R.id.radio_two_b: 
        if (checked) break; 

       case R.id.radio_two_correct: 
        if (checked) break; 

       case R.id.radio_two_d: 
        if (checked) break; 

       case R.id.radio_four_a: 
        if (checked) break; 

       case R.id.radio_four_b: 
        if (checked) break; 

       case R.id.radio_four_correct: 
        if (checked) break; 

       case R.id.radio_four_d: 
        if (checked) break; 

       case R.id.radio_five_a: 
        if (checked) break; 

       case R.id.radio_five_b: 
        if (checked) break; 

       case R.id.radio_five_c: 
        if (checked) break; 

       case R.id.radio_five_correct: 
        if (checked) break; 


      } 

     } 


     private int calculateScore(boolean answerOne, boolean answerTwo, boolean answerThreeA, 
            boolean answerThreeB, boolean answerThreeC, boolean answerThreeD, 
            boolean answerFour, boolean answerFive, Editable answerSix) { 
      score = 100; 

      if (answerOne) { 


      } else { 

       score = score - 100/6; 
      } 

      if (answerTwo) { 


      } else { 

       score = score - 100/6; 
      } 


      if (answerThreeB && answerThreeC) { 

      } else { 

       score = score - 100/6; 
      } 




      if (answerFour) { 


      } else { 

       score = score - 100/6; 
      } 

      if (answerFive) { 


      } else { 

       score = score - 100/6; 
      } 


      if (answerSix.toString().equals("")) { 

       score = score - 100/6; 

      } else { 


      } 

      return score; 

     } 


     public void submitScore(View view) { 
      RadioButton answerOne = (RadioButton) findViewById(R.id.radio_one_correct); 
      boolean correctAnswerOne = answerOne.isChecked(); 

      RadioButton answerTwo = (RadioButton) findViewById(R.id.radio_two_correct); 
      boolean correctAnswerTwo = answerTwo.isChecked(); 

      CheckBox answerThreeA = (CheckBox) findViewById(R.id.checkbox_three_a); 
      boolean incorrectAnswerThreeA = answerThreeA.isChecked(); 

      CheckBox answerThreeB = (CheckBox) findViewById(R.id.checkbox_three_b_correct); 
      boolean correctAnswerThreeB = answerThreeB.isChecked(); 

      CheckBox answerThreeC = (CheckBox) findViewById(R.id.checkbox_three_c_correct); 
      boolean correctAnswerThreeC = answerThreeC.isChecked(); 

      CheckBox answerThreeD = (CheckBox) findViewById(R.id.checkbox_three_d); 
      boolean incorrectAnswerThreeD = answerThreeD.isChecked(); 

      RadioButton answerFour = (RadioButton) findViewById(R.id.radio_four_correct); 
      boolean correctAnswerFour = answerFour.isChecked(); 

      RadioButton answerFive = (RadioButton) findViewById(R.id.radio_five_correct); 
      boolean correctAnswerFive = answerFive.isChecked(); 

      EditText answerSix = (EditText) findViewById(R.id.question_six_edit_text); 
      Editable correctAnswerSix = answerSix.getEditableText(); 

      int finalScore = calculateScore(correctAnswerOne, correctAnswerTwo, 
        incorrectAnswerThreeA, correctAnswerThreeB, correctAnswerThreeC, 
        incorrectAnswerThreeD, correctAnswerFour, correctAnswerFive, correctAnswerSix); 

      Toast.makeText(this, "Congratulations! You have a score of " + finalScore + " out of " + 
        "100", Toast.LENGTH_LONG).show(); 

} 

} 
+1

你需要所有这些都在'if else'中。否则,如果这是真的,它仍然会击中“B && C”。而你真正需要的只是一个'if'来检查那些不正确的。我认为。但是你的代码对你如何处理它很困惑。 – codeMagic

+0

如果还有什么需要的话? – Mir

回答

0

您现在编写的代码有点混乱。基本上所有你需要的是检查正确的框被检查。

这是一个伪代码方法,它可以进一步优化。但基本上存储了一个正确的ID列表。根据是否选中正确答案来增加或减少分数。

void checkAnswers() 
{ 
    for(Checkbox box : answerBoxes) 
    { 
     if(correctIds.contains(box.getId())) 
     { 
     if(box.isChecked()) 
     { 
      score++; 
     } 
     else 
     { 
      score--; 
     } 
     } 
     else 
     { 
     if(box.isChecked()) 
     { 
      score--; 
     } 
     } 
    } 
}