2016-09-22 45 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--; 
     } 
     } 
    } 
}