如何处理这个循环错误?[c#]

时间:2018-01-25 06:17:46

标签: c# loops debugging

我最近正在开展一个关于一个程序的项目,该项目可以在1-10之间取一个随机数,让你猜猜它是什么,你有五次机会猜对了。但每次我运行程序时,当我输入一个比随机数更大或更小的数字时,程序会立即耗尽这样的机会:

You are now playing 'Guess a Number'! The number is going to draw randomly from the range of 1 - 10. Enter the number you think the console drew and you have five chances to guess! Good luck!
5
The number you entered is larger than the random number, you have 4 chances left.
The number you entered is larger than the random number, you have 3 chances left.
The number you entered is larger than the random number, you have 2 chances left.
The number you entered is larger than the random number, you have 1 chances left.
The number you entered is larger than the random number, you have 0 chances left.
Sorry, you have no more guesses.

以下是原始代码:

static void Main(string[] args)
    {
        bool quit = false;
        while (!quit)
        {
            Console.WriteLine("You are now playing 'Guess a Number'! The number is going to draw randomly from the range of 1 - 10. Enter the number you think the console drew and you have five chances to guess! Good luck!");
            Random random = new Random();
            bool guessingNumber = true;
            int guesses = 5;
            int randomNumber = random.Next(1, 10);
            string playerGuess = Console.ReadLine();
            List<int> num = new List<int>();
            int oneNum;
            if (int.TryParse(playerGuess, out oneNum))
            {
               num.Add(oneNum);
            }

            while(guessingNumber)
            {
                if (oneNum < randomNumber)
                {
                    guesses--;
                    Console.WriteLine("The number you entered is smaller than the random number, you have {0} chances left.", guesses);
                    break;
                }

                if (oneNum > randomNumber)
                {
                    guesses--;
                    Console.WriteLine("The number you entered is larger than the random number, you have {0} chances left.", guesses);
                }

                if (oneNum == randomNumber)
                {
                    Console.WriteLine("Congratulations! You have guessed the right number!");
                }

                if (guesses == 0)
                {
                    Console.WriteLine("Sorry, you have no more guesses.");
                    guessingNumber = false;
                }
            }
        }

请帮我找到问题,因为我很难做到这一点,谢谢!

3 个答案:

答案 0 :(得分:1)

你主要犯了两个错误。

首先,你没有在循环的每次迭代中读取新的输入,所以如果输入错误,while循环返回,看到相同的输入,将它与随机数比较,得到相同的结果,下一次迭代...

要纠正此问题,请将读取输入的代码移至while循环的开头:

while (guessingNumber)
{
    playerGuess = Console.ReadLine();
    if (int.TryParse(playerGuess, out oneNum))
    {
        num.Add(oneNum);
    }
    ...

其次,如果猜测较小,你不应该break离开循环。当猜测正确时,您应break

if (oneNum < randomNumber)
{
    guesses--;
    Console.WriteLine("The number you entered is smaller than the random number, you have {0} chances left.", guesses);
    // don't break here!

}

if (oneNum > randomNumber)
{
    guesses--;
    Console.WriteLine("The number you entered is larger than the random number, you have {0} chances left.", guesses);
}

if (oneNum == randomNumber)
{
    Console.WriteLine("Congratulations! You have guessed the right number!");
    break; // add this!
}

答案 1 :(得分:0)

如果number大于或小于随机数,则需要使guessingNumber = false并且guess counter必须超出第一个while循环。

static void Main(string[] args)
        {
            bool quit = false;
            int guesses = 5;

            while (!quit)
            {
                Console.WriteLine("You are now playing 'Guess a Number'! The number is going to draw randomly from the range of 1 - 10. Enter the number you think the console drew and you have five chances to guess! Good luck!");
                Random random = new Random();
                bool guessingNumber = true;

                int randomNumber = random.Next(1, 10);
                string playerGuess = Console.ReadLine();
                List<int> num = new List<int>();
                int oneNum;
                if (int.TryParse(playerGuess, out oneNum))
                {
                    num.Add(oneNum);
                }

                while (guessingNumber)
                {
                    if (oneNum < randomNumber)
                    {
                        guesses--;
                        Console.WriteLine("The number you entered is smaller than the random number, you have {0} chances left.", guesses);
                        guessingNumber = false;
                        break;
                    }

                    if (oneNum > randomNumber)
                    {
                        guesses--;
                        Console.WriteLine("The number you entered is larger than the random number, you have {0} chances left.", guesses);
                        guessingNumber = false;
                    }

                    if (oneNum == randomNumber)
                    {
                        Console.WriteLine("Congratulations! You have guessed the right number!");
                        guessingNumber = false;
                    }

                    if (guesses == 0)
                    {
                        Console.WriteLine("Sorry, you have no more guesses.");
                        guessingNumber = false;
                    }
                }
            }
        }

答案 2 :(得分:0)

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
 if (! window.jQuery) {
 alert('No Connection !!');
  }
 else {
 // internet connection established
 }
</script>
相关问题