输出最终分数后的切换用例块不进行编译
本文关键字:编译 输出 | 更新日期: 2023-09-27 18:26:28
在显示最终分数后,它不会显示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
对于您的特定情况,最好使用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
}
你应该使用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.
您的代码编译得很好。
如果你记录了那个开关块的默认情况,你会发现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);