猜硬币的C#程序

标签 c# loops

我是编程初学者,所以任何提示都将不胜感激!

我正在尝试创建一个程序,让用户猜测“抛硬币”会产生正面 (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/

相关文章:

php - 使表格标题正确定位的问题

c# - ASP.NET MVC 模型嵌套路由

c++ - 无法从 C++ 循环中获得所需的输出 (cout)

reactjs - 由于 'read-only' 错误,React : my function isn't working, 中的函数。为什么?

c# - 使用执行阅读器从 SQL 获取返回值

r - 使用循环(或向量化)通过向量中的多个元素对列表进行子集化

java - 不知道为什么这不起作用

C#构造函数参数传递

c# - 静态字段与 session 变量

javascript - Angular2 中的文件上传不起作用