【问题标题】:C# random number and greater than operator [closed]C# 随机数和大于运算符 [关闭]
【发布时间】:2017-03-25 20:11:33
【问题描述】:

我正在尝试生成一个随机数并让用户 5 次尝试猜测正确的数字。我想比较他们的猜测并告诉他们是太高还是太低。 VS 不会执行,我不明白为什么会出错。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NumberGuessingGame
{
class Program
{
    static void Main(string[] args)

    {
        bool keepGoing = true;
        while (keepGoing)
        {
            Random rnd = new Random();
            int randomnumber = rnd.Next(1, 100);

            //PC tells user to pick a number, display guessed number


            Console.Write("Guess any integer between 1 and 100: ");
            int userentry = Console.ReadLine();


            {

                if (int.Parse(userentry > rnd.Next))
                { Console.WriteLine($"You entered {userentry}. That's too 
high. Try again.");
                    keepGoing = true;

                }

                if (int.Parse(userentry < randomnumber))
                {
                    Console.WriteLine($"You entered {userentry}. That's too 
low. Try again.");
                    keepGoing = true;
                }

                if (int.Parse(userentry = randomnumber))
                {
                    Console.WriteLine($"You entered {userentry}. That's 
right. Good job.");
                    keepGoing = false;
                }

                else (keepgoing) > 5);

                {
                    Console.WriteLine($"You've already tried 5 times. You 
lose.");
                    keepGoing = false;
                }

                else
                {
                Console.WriteLine("That is not a valid number.");
            }


        }
    }
}

}

【问题讨论】:

  • 你遇到了什么错误?
  • 请发表您的错误。目前我看到至少一个问题 - int.Parse() 被赋予一个布尔表达式,但应该只被赋予 userentry,例如int.Parse(userentry) &gt; randomnumber。此外,C# 中的等价运算符是==,而不是=,因此您要检查等价的if 应该是:if (int.Parse(userentry) == randomnumber)
  • 这里有 5 个不同的语法错误,太多了。您似乎是 C# 的完整初学者,因此我建议您在此处发布之前先阅读一些基本教程。

标签: c# if-statement random boolean-expression


【解决方案1】:

首先Console.ReadLine(); 返回一个字符串而不是int。如果您想从用户输入中获得一个整数,则需要对其进行转换:

string input = Console.ReadLine();
int userentry = Convert.ToInt32(input);

第二:您将int.Parsebool 作为参数传递。这不起作用。另外你忘记了方法Next后面的( ) 您可以从我的帖子中获取代码并像这样重写您的 if 语句:

if (userentry > rnd.Next)

或者如果你想使用int.Parse,你可以直接获取用户输入:

if (int.Parse(Console.ReadLine()) > rnd.Next())

第三:这一行:

else (keepgoing) > 5);

将被解释为单个命令。 else 语句没有条件部分。由于编译器将其解释为代码行,它会告诉您您正在尝试将 bool 与无效的 int 进行比较!

简而言之:您应该将这个条件用于在您的 while 语句中跳出循环,这样您的程序就会大大缩短。到目前为止,您在循环中不必要地重写了相同的步骤。这使得循环过时了。

Random rnd = new Random();
int randomnumber = rnd.Next(1, 100);

int allowed_attemps = 5;
while (allowed_attemps > 0)
{
    //PC tells user to pick a number, display guessed number

    Console.Write("Guess any integer between 1 and 100: ");
    string input = Console.ReadLine();
    int userentry = Convert.ToInt32(input);

    if (userentry > randomnumber)
    {
        Console.WriteLine($"You entered {userentry}. That's too  high.Try again.");
    }
    else if (userentry < randomnumber)
    {
        Console.WriteLine($"You entered {userentry}. That's too low .Try again.");
    }
    else
    {
        Console.WriteLine($"You entered {userentry}. That's right.Good job.");
        break;
    }

    allowed_attemps--;
}

【讨论】:

    【解决方案2】:

    在此示例中,您不会出错。如果你用 char 而不是 int 猜测,你的程序会崩溃。但是在这个例子中,如果你输入一个无效的输入,它将为零。我没有什么可做的,我猜你刚刚开始学习编程,所以我做了一个例子。

    class Program
    {
        static void Main(string[] args)
        {
            int numberOfTries = 0;
            bool keepGoing = true;
            Random rnd = new Random();
            int randomnumber = rnd.Next(1, 100);
    
            while (keepGoing)
            {
                //PC tells user to pick a number, display guessed number
                Console.Write("Guess any integer between 1 and 100: ");
                int userentry = 0;
                int.TryParse(Console.ReadLine(),out userentry);
    
                if (numberOfTries == 5)
                {
                    Console.WriteLine($"You've already tried 5 times. You lose.");
                    Console.ReadKey(); // A break, So you can see it before the application exit.
                    keepGoing = false;
                }
    
                if (userentry > randomnumber)
                {
                    Console.WriteLine($"You entered {userentry}. That's too high.Try again.");
                    numberOfTries++;
                }
    
                if (userentry < randomnumber && randomnumber > 0)
                {
                    Console.WriteLine($"You entered {userentry}. That's too low.Try again.");
                    numberOfTries++;
                }
    
                if (userentry == randomnumber)
                {
                    Console.WriteLine($"You entered {userentry}. That's right.Good job.");
                    numberOfTries++;
                }
    
                else if(userentry == 0)
                {
                    Console.WriteLine("That is not a valid number.");
                }
            }
        }
    }
    

    }

    【讨论】:

      【解决方案3】:

      其他一些杂项问题:

      if (int.Parse(userentry = randomnumber))
      

      这是分配,而不是比较。

      从技术上讲,按照您编写它的方式,userentry 应该已经是一个整数。当然,您正在尝试为其分配一个字符串,但它仍然 supposed 是一个 int。

      另外,== 是一个布尔表达式,不能解析为 int。此外,if (int.Parse....) 根本没有意义;想一想 - 例如,if (10)... 是什么意思?

      此外,您真的不应该每次都调用int.Parse - 只需解析一次并将其存储在变量中即可。

      第三,您实际上应该在此处使用int.TryParse,以防用户输入的不是整数。现在,程序只会崩溃。

      对于这种情况,您应该从第一个编译错误开始,并尝试一次解决一个错误。确保您仔细注意错误消息的实际文本。我建议看看How to Debug Small Programs

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2017-06-07
        • 1970-01-01
        • 2012-01-21
        • 1970-01-01
        • 2019-02-11
        • 2019-07-03
        相关资源
        最近更新 更多