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