2016-04-08 6 views
-1

基本的に私はクイズゲームを作ろうとしており、このサブプログラムチェックは答えが正しいかどうかをチェックしています。そして、基本的に私がプログラムを実行しようとするたびに、明らかに戻り値があることがわかっていても、すべてのコードパスが値を返すとは限りません。虚偽を返す。最後に声明。エラーを取得し続ける "すべてのコードパスが値を返すわけではない"

private bool CheckIfCorrect(byte questionNum, string answers, string userAnswer) 
    { 
     int adjustmentToTheScore; 

     const int EASY_QUESTION_5 = 1; 
     const int MEDIUM_QUESTION_10 = 2; 
     const int HARD_QUESTION_15 = 3; 
     const int GENERALPOINTS = 100; 

     if (userAnswer == "A" || userAnswer == "B" || userAnswer == "C" || userAnswer == "D") 
     { 
      if (answers == userAnswer) 
      { 
       if (questionNum <= EASY_QUESTION_5) 
       { 
        adjustmentToTheScore = (EASY_QUESTION_5 * GENERALPOINTS/totalTimePassed); 

        userScore += adjustmentToTheScore; 
       } 
       else if (questionNum <= MEDIUM_QUESTION_10) 
       { 
        adjustmentToTheScore = (MEDIUM_QUESTION_10 * GENERALPOINTS/totalTimePassed); 

        userScore += adjustmentToTheScore; 
       } 
       else if (questionNum <= HARD_QUESTION_15) 
       { 
        adjustmentToTheScore = (HARD_QUESTION_15 * GENERALPOINTS/totalTimePassed); 

        userScore += adjustmentToTheScore; 
       } 
       rightAnswerCount++; 

       goalSound.SoundLocation = "Goal_Sound.wav"; 
       goalSound.Play(); 

       lblTotalCorrect.Text = Convert.ToString(rightAnswerCount); 

       if (fastestAnswer == 0 || totalTimePassed < fastestAnswer) 
       { 
        fastestAnswer = totalTimePassed; 

        lblFastestAnswer.Text = Convert.ToString(fastestAnswer) + "(s)"; 
       } 

      else 
       { 
        adjustmentToTheScore = 10; 

        userScore = userScore - adjustmentToTheScore; 

        booing.SoundLocation = "Booing.wav"; 
        booing.Play(); 
       } 

       lblScore.Text = "Score: " + Convert.ToString(userScore); 

       return true; 
      } 
      else 
      { 
       MessageBox.Show("Invalid answer please put a, b, c or d!"); 

       return false; 
      } 

     } 
    } 
} 

}

+0

の原因になっているもの、条件文のネストを返さない場合は、この方法をコーディングするコードの可読性、悪い習慣を減らします。..静的コード解析ツールは、あなたのコードを改善するための提案を提供するでしょう... [ここをクリック](http://stackoverflow.com/questions/268132/invert-if-statement-to-reduce-nesting)このシナリオについての良い議論。 – felickz

答えて

0

最初の条件if (userAnswer == "A" || userAnswer == "B" || userAnswer == "C" || userAnswer == "D")がfalseと評価された場合、プログラムが実行したいことを指定する必要があります。すべてのシナリオでboolタイプの値を返す必要があるためです。したがって、あなたがしなければならないのは、ifの後にreturnステートメントを追加することです。これはtrueまたはfalseのいずれかです。そのスニペットは次のようになります:

private bool CheckIfCorrect(byte questionNum, string answers, string userAnswer) 
    { 
     //init here 
     if (userAnswer == "A" || userAnswer == "B" || userAnswer == "C" || userAnswer == "D") 
     { 
      if (answers == userAnswer) 
      { 
       if (questionNum <= EASY_QUESTION_5) 
       { 
        //Some code 
       } 
       else if (questionNum <= MEDIUM_QUESTION_10) 
       { 
        //Some code 
       } 
       else if (questionNum <= HARD_QUESTION_15) 
       { 
        //Some code 
       } 
       if (true) 
       { 
        //Some code 
       } 

       else 
       { 
        //Some code 
       } 
       return true; 
      } 
      else 
      { 
       return false; 
      } 
     } 
     return false; 
    } 
0

非常に最後のelse文の後return falseを追加してみてください。

0

最初にifステートメントを入力すると、trueまたはfalseが返されます。最初にifに失敗した場合は、下部にreturnが必要です。

0

はそのエラーは、条件付きであり、それは、このように、それは値を返しません、コードがこれらの条件に達することはできない可能性がありますreturn文があることを意味します。

ちょうどreturn false;の部分を切り取り、下の2番目の中かっこの後に貼り付けます。

メッセージボックスが表示され、それでもメッセージはfalseになります。それはtrueの上にある唯一の状態のようです。 return文はメソッドスコープの評価を終了します。 return trueより下のものは、一度その行に当たったら評価されます。

0

非void関数では、プログラム/メソッド内のすべての論理パスは、末尾に呼び出し元に値を返します。あなたのケースでは

は、最初のブロックの偽条件がexception

private bool CheckIfCorrect(byte questionNum, string answers, string userAnswer) 
{ 
    int adjustmentToTheScore; 

    const int EASY_QUESTION_5 = 1; 
    const int MEDIUM_QUESTION_10 = 2; 
    const int HARD_QUESTION_15 = 3; 
    const int GENERALPOINTS = 100; 

    if (userAnswer == "A" || userAnswer == "B" || userAnswer == "C" || userAnswer == "D") 
    { 
     if (answers == userAnswer) 
     { 
      if (questionNum <= EASY_QUESTION_5) 
      { 
       adjustmentToTheScore = (EASY_QUESTION_5 * GENERALPOINTS/totalTimePassed); 

       userScore += adjustmentToTheScore; 
      } 
      else if (questionNum <= MEDIUM_QUESTION_10) 
      { 
       adjustmentToTheScore = (MEDIUM_QUESTION_10 * GENERALPOINTS/totalTimePassed); 

       userScore += adjustmentToTheScore; 
      } 
      else if (questionNum <= HARD_QUESTION_15) 
      { 
       adjustmentToTheScore = (HARD_QUESTION_15 * GENERALPOINTS/totalTimePassed); 

       userScore += adjustmentToTheScore; 
      } 
      rightAnswerCount++; 

      goalSound.SoundLocation = "Goal_Sound.wav"; 
      goalSound.Play(); 

      lblTotalCorrect.Text = Convert.ToString(rightAnswerCount); 

      if (fastestAnswer == 0 || totalTimePassed < fastestAnswer) 
      { 
       fastestAnswer = totalTimePassed; 

       lblFastestAnswer.Text = Convert.ToString(fastestAnswer) + "(s)"; 
      } else 
      { 
       adjustmentToTheScore = 10; 
       userScore = userScore - adjustmentToTheScore; 

       booing.SoundLocation = "Booing.wav"; 
       booing.Play(); 
      } 

      lblScore.Text = "Score: " + Convert.ToString(userScore); 
      return true; 
     } 
     else 
     { 
      MessageBox.Show("Invalid answer please put a, b, c or d!"); 
      return false; 
     } 
    } 

    return false; // this is required. 
} 
0
private bool CheckIfCorrect(byte questionNum, string answers, string userAnswer) 
     { 
      int adjustmentToTheScore; 

      const int EASY_QUESTION_5 = 1; 
      const int MEDIUM_QUESTION_10 = 2; 
      const int HARD_QUESTION_15 = 3; 
      const int GENERALPOINTS = 100; 

      if (userAnswer == "A" || userAnswer == "B" || userAnswer == "C" || userAnswer == "D") 
      { 
       if (answers == userAnswer) 
       { 
        if (questionNum <= EASY_QUESTION_5) 
        { 
         adjustmentToTheScore = (EASY_QUESTION_5 * GENERALPOINTS/totalTimePassed); 

         userScore += adjustmentToTheScore; 
        } 
        else if (questionNum <= MEDIUM_QUESTION_10) 
        { 
         adjustmentToTheScore = (MEDIUM_QUESTION_10 * GENERALPOINTS/totalTimePassed); 

         userScore += adjustmentToTheScore; 
        } 
        else if (questionNum <= HARD_QUESTION_15) 
        { 
         adjustmentToTheScore = (HARD_QUESTION_15 * GENERALPOINTS/totalTimePassed); 

         userScore += adjustmentToTheScore; 
        } 
        rightAnswerCount++; 

        goalSound.SoundLocation = "Goal_Sound.wav"; 
        goalSound.Play(); 

        lblTotalCorrect.Text = Convert.ToString(rightAnswerCount); 

        if (fastestAnswer == 0 || totalTimePassed < fastestAnswer) 
        { 
         fastestAnswer = totalTimePassed; 

         lblFastestAnswer.Text = Convert.ToString(fastestAnswer) + "(s)"; 
        } 

       else 
        { 
         adjustmentToTheScore = 10; 

         userScore = userScore - adjustmentToTheScore; 

         booing.SoundLocation = "Booing.wav"; 
         booing.Play(); 
        } 

        lblScore.Text = "Score: " + Convert.ToString(userScore); 

        return true; 
       } 
       else 
       { 
        MessageBox.Show("Invalid answer please put a, b, c or d!"); 

        return false; 
       } 

      } 
      else 
      { 
      return false; --- add for first if condition 
      } 
    } 
関連する問題