我是编程初学者,所以任何提示都将不胜感激!
我正在尝试创建一个程序,让用户猜测“抛硬币”会产生正面 (0) 还是反面 (1) 使用随机数生成器和循环作为“硬币”。该程序必须输出正确猜测占所玩游戏总数的百分比。
我试过很多不同的方法,但都不太对!这很令人沮丧。
提前感谢任何提示! -C
这基本上是我最接近的:
for (numPlays = 0; ; numPlays++)
{
Console.Write("\nWrite H/h to guess Heads, T/t to guess Tails, or Q/q to quit => ");
userChoice = Convert.ToChar(Console.ReadLine());
if (userChoice == 'H' || userChoice == 'h')
{
if (compChoice == 0)
{
Console.WriteLine("\nYOU WON");
numWins++;
}
else
Console.WriteLine("\nYOU LOSE");
if (userChoice == 'Q' || userChoice == 'q')
if (compChoice == 1)
{
Console.WriteLine("\nYOU WON");
numWins++;
}
else
Console.WriteLine("\nYOU LOSE");
if (userChoice == 'q' || userChoice == 'Q')
{
percentWin = (double)(numWins / numPlays);
Console.WriteLine("\nYou won {0} out of {1} game(s) or {2:P} of the games played.", numWins, numPlays, percentWin);
}
}
}
Console.ReadKey();
}
}
最佳答案
我对你的代码做了一些优化,希望对你有所帮助:
int numPlays = 0, numWins = 0;
int compChoice = 0;
char userChoice;
double percentWin;
Random rnd = new Random();
while (true)
{
Console.Write("\nWrite H/h to guess Heads, T/t to guess Tails, or Q/q to quit => ");
userChoice = Console.ReadKey().KeyChar;
compChoice = rnd.Next(0, 2);
if (char.ToLowerInvariant(userChoice) != 'q')
{
if (char.ToLowerInvariant(userChoice) == 'h' && compChoice == 0)
{
Console.WriteLine("\nYOU WON");
numWins++;
}
else if (char.ToLowerInvariant(userChoice) == 't' && compChoice == 1)
{
Console.WriteLine("\nYOU WON");
numWins++;
}
else
{
Console.WriteLine("\nYOU LOSE");
}
numPlays++;
}
else
{
percentWin = (double) numWins/numPlays;
Console.WriteLine("\nYou won {0} out of {1} game(s) or {2:P} of the games played.", numWins, numPlays, percentWin);
break;
}
}
我认为你不需要解释,所有的代码都是不言自明的。但是你在计算百分比时有一个明显的错误:
percentWin = (double)(numWins / numPlays);
这里你正在执行一个整数
除法,然后将该结果转换为double
,这是毫无意义因为你已经失去了你的小数点。相反,您应该将其中一个操作数转换为 double
,这样它将执行双除法,您将得到正确的结果。
关于猜硬币的C#程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21925301/