2016-09-22 11 views
0

クイズアプリケーションに正しいスコアを表示する際に、特にCheckBoxを表示するのに問題があります。私は4つの選択肢がありますが、2つだけが正しいです(B & C)。 4つの選択肢すべてが選択されている(誤っている)と、ポイントが追加されます。これを防ぐにはどうしたらいいですか?チェックボックス?誰でも知っていますか?ありがとう!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

if elseに入る必要はありますか? – 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--; 
     } 
     } 
    } 
} 
関連する問題