C#随机数和大于运算符

时间:2017-03-25 20:11:34

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

我试图生成一个随机数,并让用户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.");
            }


        }
    }
}

}

3 个答案:

答案 0 :(得分:2)

首先Console.ReadLine();返回一个字符串,而不是int。如果你想从用户输入中得到一个整数,你需要转换它:

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

第二:您将int.Parse bool作为参数递交。这不起作用。此外,您忘记了方法( )背后的Next 您可以从我的帖子中获取代码并重写if语句,如下所示:

if (userentry > rnd.Next)

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

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

第三:这一行:

else (keepgoing) > 5);

将被解释为单个命令。 else语句没有条件部分。由于编译器会将其解释为代码行,因此它会告诉您,您正在尝试将boolint进行比较,但这不起作用!

简而言之:你应该采取这个条件将你的循环中的循环中断,并且你的程序将会非常缩短。到目前为止,您在循环中不必要地重写相同的步骤。这使得循环obosolete。

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--;
}

答案 1 :(得分:0)

在这个例子中,没有什么可以出错。如果你用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.");
            }
        }
    }
}

}

答案 2 :(得分:0)

其他一些杂项问题:

if (int.Parse(userentry = randomnumber))

这是作业,不是比较。

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

此外,==是一个布尔表达式,而不是你可以解析为int的东西。此外,if (int.Parse....)从根本上说没有意义;想一想 - 例如if (10)...会是什么意思?

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

第三,你应该在这里实际使用int.TryParse,以防用户输入不是整数的东西。现在,程序将崩溃。

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