Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在随机数猜测生成器中实现重播功能_C#_.net_Visual Studio - Fatal编程技术网

C# 在随机数猜测生成器中实现重播功能

C# 在随机数猜测生成器中实现重播功能,c#,.net,visual-studio,C#,.net,Visual Studio,我最近在大学里做了一些编程练习,我遇到了一个让用户在数字1和100之间进行猜测的练习。他们还希望它能够让用户再次玩。第一次运行时,程序正常,但当我说“y”再次播放时,它生成的数字与我之前猜测的相同: 我找到了一些解决方案,但是有太多的意大利面代码,我无法在网站上阅读。有没有办法节省几行代码 以下是我的资料来源: int guess = 0; Random r1 = new Random(); int answer = r1.Next(1, 100);

我最近在大学里做了一些编程练习,我遇到了一个让用户在数字1和100之间进行猜测的练习。他们还希望它能够让用户再次玩。第一次运行时,程序正常,但当我说“y”再次播放时,它生成的数字与我之前猜测的相同:

我找到了一些解决方案,但是有太多的意大利面代码,我无法在网站上阅读。有没有办法节省几行代码

以下是我的资料来源:

    int guess = 0;
        Random r1 = new Random();
        int answer = r1.Next(1, 100);
        bool finished = false;
        while (!finished)
        {
          
          
            Console.WriteLine("please guess a number between 1 - 100");
            guess = int.Parse(Console.ReadLine());

            if (guess < answer)
                {
                    Console.WriteLine("your answer is too low please try again!");
                }
                else if (guess > answer)
                {
                    Console.WriteLine("your answer is too high please try again!");
                
                }
           else if (guess == answer)//nested 
            {
                Console.WriteLine("your answer is correct!");
                Console.WriteLine("answer:" + answer);
                Console.WriteLine("Play again? ('y' or 'n')");
                string playAgain = null;
                playAgain = Console.ReadLine();

                if (playAgain == "n")
                {
                    finished = true;
                }
            }//end of nested else 

        }//end of while
int guess=0;
Random r1=新的Random();
int-answer=r1.Next(1100);
bool finished=false;
当(!完成)
{
WriteLine(“请猜一个介于1-100之间的数字”);
guess=int.Parse(Console.ReadLine());
如果(猜测<回答)
{
控制台。WriteLine(“您的答案太低,请再试一次!”);
}
else if(猜测>回答)
{
控制台。WriteLine(“您的答案太高,请再试一次!”);
}
else if(猜测==答案)//嵌套
{
控制台。WriteLine(“你的答案是正确的!”);
Console.WriteLine(“回答:+回答”);
Console.WriteLine(“再次播放”('y'或'n'));
字符串playreach=null;
playreach=Console.ReadLine();
如果(再次播放==“n”)
{
完成=正确;
}
}//嵌套else的结束
}//结束

每次都给出相同的数字进行猜测的原因是,如果用户想要继续游戏,您不会生成该数字,而是使用已经声明的数字

else if (guess == answer)//nested 
        {
            Console.WriteLine("your answer is correct!");
            Console.WriteLine("answer:" + answer);
            Console.WriteLine("Play again? ('y' or 'n')");
            string playAgain = null;
            playAgain = Console.ReadLine();

            if (playAgain == "n")
            {
                finished = true;
            }
            answer = r1.Next(1,100);
        }//end of nested else 
如果您想去掉一些行,那么您可以简单地在循环中声明一些变量

    Random r1 = new Random();
    int answer = r1.Next(1, 100);
    while (true)
    {
        Console.WriteLine("please guess a number between 1 - 100");
        guess = int.Parse(Console.ReadLine());

        if (guess < answer)
        {
           Console.WriteLine("your answer is too low please try again!");
        }
        else if (guess > answer)
        {
           Console.WriteLine("your answer is too high please try again!");
            
        }
       else if (guess == answer)//nested 
       {
           Console.WriteLine("your answer is correct!");
           Console.WriteLine("answer:" + answer);
           Console.WriteLine("Play again? ('y' or 'n')");

            if (Console.ReadLine() == "n")
            {
                break; // stop the loop
            }
        }//end of nested else 

    }//end of while
Random r1=new Random();
int-answer=r1.Next(1100);
while(true)
{
WriteLine(“请猜一个介于1-100之间的数字”);
guess=int.Parse(Console.ReadLine());
如果(猜测<回答)
{
控制台。WriteLine(“您的答案太低,请再试一次!”);
}
else if(猜测>回答)
{
控制台。WriteLine(“您的答案太高,请再试一次!”);
}
else if(猜测==答案)//嵌套
{
控制台。WriteLine(“你的答案是正确的!”);
Console.WriteLine(“回答:+回答”);
Console.WriteLine(“再次播放”('y'或'n'));
if(Console.ReadLine()=“n”)
{
break;//停止循环
}
}//嵌套else的结束
}//结束

因为在重新开始猜测之前,“答案”字段始终是先前生成的随机值“54”。因此,如果用户输入“y”,您可以添加一条语句来重置“answer”的值


你从来不会在循环中调用Random.Next,因此每次迭代都使用相同的值。将变量声明移动到循环中,最好是在分配它们的行中。在方法的顶部声明变量是扩大其范围并引入bug的好方法
// code omitted
// ...
// reset answer
if(playAgain == "y")
{
    answer = r1.Next(1, 100);
}

if (playAgain == "n")
{
    finished = true;
}