Всем привет. Продолжаю изучать 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
. Он у вас не выдаст случайное число при повторном вызове.
Простой пример:
for (int i = 0; i < 3; i++)
{
Console.WriteLine(GenerationRandValue(5));
}
Результат:
2
2
2
Решение тут банально простое, вынесите Random rand = new Random();
за пределы метода, не инициализируйте его каждый раз.
static Random rand = new Random();
static int GenerationRandValue(int interval)
{
int rndValue = 1 + rand.Next(interval); //генерируем случайно число и записываем его в переменную
return rndValue; //возвращаем рандомное значение
}
Вы делаете следующее: Convert.ToInt32(Console.ReadLine());
- вы на 100% уверены, что пользователь введет число? Если нет, делайте проверку.
Далее как говорится на вкус и цвет:
Я лично просто терпеть не могу всякие "Hello " + id + "world!"
, это занимает много места, и не всегда читабельно. Воспользуйтесь интерполяцией строк (С#6++). Тогда строка приобретет более короткий и понятный вид: $"Hello {id} world!"
.
Старайтесь убирать дублирующие строки. Например вы постоянно спрашиваете пользователя число, записываете его и работаете дальше, так почему бы это не вынести в отдельный метод? К примеру мы сделаем метод, который выведет сообщение и начнет спрашивать число, проверяя его на валидность, результат отдаст далее:
static int AskUser(string message)
{
Console.WriteLine(message);
while (true)
{
if (int.TryParse(Console.ReadLine(), out int result))
return result;
Console.WriteLine("Не является числом!");
}
}
Все, теперь строки:
Console.WriteLine("Выберите промежуток чисел от 1 до ");
int interval = Convert.ToInt32(Console.ReadLine());
Мы заменяем всего лишь одной:
int interval = AskUser("Выберите промежуток чисел от 1 до ");
Виртуальный выделенный сервер (VDS) становится отличным выбором
Такая проблема есть тестовый проект на yii2И нужно из 2 xml файлов собрать массив и вывести в gridView, сам массив собрать не особо сложно проблема...
Есть такой код, но он для Chrome а как сделать что для Mozilla выводилось сообщение?