大家好。我继续学习 C#。写了一个小控制台应用程序:猜数字。请评分。我考虑了之前对变量名称、方法细分、代码注释的注释。该应用程序本身有效,似乎我没有注意到任何错误。把你的鼻子指向哪里出了问题。谢谢你。
class Program
{
static void Rules()
{
//Вывод правил игры
Console.WriteLine("Правила игры: \nУгадай число, за определенное число попыток. \n\nНастроим условия игры: ");
}
static int GenerationRandValue(int interval)
{
Random rand = new Random();
int rndValue = 1 + rand.Next(interval); //генерируем случайно число и записываем его в переменную
return rndValue; //возвращаем рандомное значение
}
static string Game(int attemp, int rndValue, int interval)
{
int numAttemp = 0; //хранение количества попыток
while (attemp > 0)
{
numAttemp++; //счетчик попыток (с какой угадал)
attemp--; //счетчик попыток (сколько осталось)
Console.WriteLine("Попытка " + numAttemp + ". Введите число: ");
int entNum = Convert.ToInt32(Console.ReadLine()); //запись в переменную числа, которое ввел пользователь
if (entNum == 0 || entNum > interval || entNum < 0)
{
return "Будь внимтельнее! От 1 до " + interval + ".";
}
if (entNum == rndValue)
{
return "Молодец! Ты угадал с " + numAttemp + " попытки.";
}
}
return "Не угадал, это число " + rndValue + ".";
}
static void Main(string[] args)
{
Console.Title = "Угадай число"; //заголовок окна консоли
Rules(); //вывод правил
Console.WriteLine("Выберите промежуток чисел от 1 до ");
int interval = Convert.ToInt32(Console.ReadLine()); //запись числа, которое будет промежутком в переменную
Console.WriteLine("Введите количество попыток: ");
int attemp = Convert.ToInt32(Console.ReadLine()); //запись числа, которое будет количеством попыток в переменную
int rndValue = GenerationRandValue(interval); //записываем в переменную rndValue рандомное число, полученное из метода GenerationRandValue
Console.WriteLine(Game(attemp, rndValue, interval));
Console.ReadKey();
}
}
基本上你有两个主要问题:
Random. 当您再次调用它时,它不会给您一个随机数。简单的例子:
结果:
这里的解决方法很简单,把它从
Random rand = new Random();方法中拿出来,不要每次都初始化它。您执行以下操作:
Convert.ToInt32(Console.ReadLine());- 您是否 100% 确定用户会输入数字?如果没有,请检查。此外,正如他们在味道和颜色上所说:
我个人就是受不了各种
"Hello " + id + "world!",它占用了很多空间,而且并不总是可读的。使用字符串插值(C#6++)。然后该行将采用更短且更易于理解的形式:$"Hello {id} world!".尝试删除重复的行。例如,你不断地向用户询问一个数字,写下来然后继续工作,那么为什么不把它放在一个单独的方法中呢?例如,我们将创建一个方法,该方法将显示一条消息并开始询问一个数字,检查它的有效性,结果将进一步给出:
就是这样,现在行:
我们只替换一个: