最终得分结束后的开关案例块未编译

时间:2013-08-05 21:18:48

标签: c#

在显示最终得分后,它不显示IQ结果。请帮忙。这是完整的程序...我使用箭头来显示拒绝编译的开关块

class Class1
{
    public static int attempt, sum, AptScore, GenScore, MathScore, EngScore, bonus, TotalScore, FinalScore, choice = 0;
    public static string ans;
    static void Main(string[] args)
    {

           int FinalCount, AptCount = 0, EngCount = 0, MathCount = 0, GenCount = 0;

           Console.WriteLine("Welcome to Salisbury University IQ Test game \n=====================================");
           Console.WriteLine();
           Console.WriteLine("How many times have you attempted this test?");
           attempt = Convert.ToInt32(Console.ReadLine());


           while (true)
           {
               if (attempt > 1)
               {
                   Console.WriteLine("You cannot take this test");
                   break;
               }

               while (true)
               {

                   FinalCount = AptCount + EngCount + MathCount + GenCount;
                   if (FinalCount < 4)
                   {

                       Console.WriteLine("Salisbury University IQ Test game \n========================================");
                       Console.WriteLine("Press \n1. Aptitude \n2. English. \n3. Math \n4. Gk \n5. Exit");
                       choice = Convert.ToInt32(Console.ReadLine());

                       switch (choice)
                       {
                           case 1:
                               if (AptCount > 0)
                               {
                                   Console.WriteLine("THIS QUESTION HAS BEEN ATTEMPTED!!!");
                                   Console.WriteLine();
                                   continue;

                               }
                               Console.WriteLine(" What was the name of the lebanon tyrant who ruled for years unending before he was toppled due to civil war? \nA. Osama Bin laden \nB. Gaddafi \nC. Jonathan ");
                               ans = Console.ReadLine();
                               if (ans == "B" || ans == "b")
                               {
                                   AptScore += 10;
                               }
                               AptCount++;
                               continue;

                           case 2:
                               if (EngCount > 0)
                               {
                                   Console.WriteLine("THIS QUESTION HAS BEEN ATTEMPTED!!!");
                                   Console.WriteLine();
                                   continue;
                               }
                               Console.WriteLine(" What is the antonym of Pleasure? \nA. Pain \nB. Ecstacy \nC. Wonder");
                               ans = Console.ReadLine();
                               if (ans == "A" || ans == "a")
                               {
                                   EngScore += 10;
                               }
                               EngCount++;
                               continue;


                           case 3:
                               if (MathCount > 0)
                               {
                                   Console.WriteLine("THIS QUESTION HAS BEEN ATTEMPTED!!!");
                                   Console.WriteLine();
                                   continue;
                               }
                               Console.WriteLine(" What is the sum of 435 and 345? \nA. 799 \nB. 780 \nC. 600 ");
                               ans = Console.ReadLine();
                               if (ans == "B" || ans == "b")
                               {
                                   MathScore += 10;
                               }
                               MathCount++;
                               continue;

                           case 4:
                               if (GenCount > 0)
                               {
                                   Console.WriteLine("THIS QUESTION HAS BEEN ATTEMPTED!!!");
                                   Console.WriteLine();
                                   continue;
                               }
                               Console.WriteLine(" What year did Nigeria become a republic? \nA. 1960 \nB. 1963 \nC. 1990 ");
                               ans = Console.ReadLine();
                               if (ans == "B" || ans == "b")
                               {
                                   GenScore += 10;
                               }
                               GenCount++;
                               continue;

                           case 5:
                               Environment.Exit(0);
                               break;

                           default:
                               Console.WriteLine("You entered an invalid number");
                               continue;
                       } // end of switch

                   break;
               }  // end of inner while loop
                   break;
            } // end of else

              break;
           } // outer loop end

           if (attempt < 5 && attempt != 0)
           {
           TotalScore = MathScore + GenScore + EngScore + AptScore;
           Console.WriteLine("Your total score is : " + TotalScore);

           if (TotalScore == 10)
           {
               Console.WriteLine(" You have no Bonus point ");
           }
           else if (TotalScore == 20)
           {
               bonus += 2;
               Console.WriteLine("Your Bonus is {0}", bonus);
           }
           else if (TotalScore == 30)
           {
               bonus += 5;
               Console.WriteLine("Your Bonus is {0}", bonus);

           }
           else if (TotalScore == 40)
           {
               bonus += 10;
               Console.WriteLine("Your Bonus is {0}", bonus);

           }

            FinalScore = TotalScore + bonus;
               Console.WriteLine("Your finalscore is : " + FinalScore);

**it refuses to compile this switch block -->**  switch (FinalScore)
               {
                   case 10:
                       if (FinalScore >= 10)
                       {
                           Console.WriteLine("Your IQ level is below average");
                       }
                       break;

                   case 22:
                       if (FinalScore >= 22)
                       {
                           Console.WriteLine("Your IQ level is average");
                       }
                       break;
                   case 35:
                       if (FinalScore >= 35)
                       {
                           Console.WriteLine("You are intelligent");
                       }
                       break;
                   case 40:
                       if (FinalScore == 40)
                       {
                           Console.WriteLine("You are a genius");
                       }
                       break;

                   default:
                       break;

               } // end of last s1witch case

           }// end of if statement
       } // end of main method */


    } // end of class

3 个答案:

答案 0 :(得分:1)

对于你的特定情况,使用if / else总是更好,使用switch语句你不能在这种情况下使用条件。看起来您正在检查范围,如果范围是常数,那么您可以尝试以下

                   if (FinalScore == 40)
                   {

                       Console.WriteLine("You are a genius");
                   }else  if (FinalScore >= 35)
                   {
                       Console.WriteLine("You are intelligent");

                   }else if (FinalScore >= 22)
                   {
                       Console.WriteLine("Your IQ level is average");

                   }else if(FinalScore >= 10)
                   {
                       Console.WriteLine("Your IQ level is below average");         
                   }else
                   {
                       // something else
                   }

答案 1 :(得分:1)

你应该使用If else语句来做你想做的事情,你可以通过使用这样的三元语句来缩短你的代码,

 Console.WriteLine((FinalScore >= 40) ? "You are a genius" :
                 (FinalScore >= 35) ? "You are intelligent" :
                 (FinalScore >= 22) ? "Your IQ level is average" :
                 (FinalScore >= 10) ? "Your IQ level is below average" : "You are really below average");
//The really below average would be your something else referenced above.

答案 2 :(得分:0)

您的代码编译得很好。

如果您记录了该交换机块的默认情况,您会看到40实际上是无法访问的情况。你的公式保证永远不会产生40 - 由于奖励积分,所有4个正确值都是50分。所有错误都不会产生结果。

有效案例为:0, 10, 22, 35, 50。您只考虑10, 22, & 35

default:
    // this would've thrown an exception for FinalScore==50
    throw new Exception("unexpected score of " + FinalScore);