#c#
#c#
Вопрос:
В настоящее время я работаю над игрой в угадывание случайных чисел в школе. Это всего лишь моя вторая неделя программирования, поэтому это задание было для меня, мягко говоря, сложным. Я думаю, что у меня все отключено, кроме того, что мой цикл должен быть где-то сломан (я не могу его найти!), Потому что он никогда не определяет правильный ответ — просто утверждает, что каждое предположение неверно. Что я сделал?? Я надеюсь, что вы сможете мне помочь 🙂 Очень признателен!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Assn3_2
{
class Program
{
public static int SelectedNumber = 0;
public static Random ran = new Random();
public static bool GameOver = false;
public static int UserMaxValue = 0;
static void Main(string[] args)
{
int UserNumber;
SelectedNumber = ran.Next(0, UserMaxValue);
do
{
Console.WriteLine("What is the maximum number you want to guess from?");
UserMaxValue = Convert.ToInt32(Console.ReadLine());
do
{
Console.WriteLine("Please make a guess between 1 and {0}", UserMaxValue);
UserNumber = Convert.ToInt32(Console.ReadLine());
GuessNumber(UserNumber);
} while (GameOver == false);
} while (GameOver == false);
}
public static void GuessNumber(int UserNumber)
{
int playagain = 0;
if (UserNumber < SelectedNumber)
Console.WriteLine("Wrong. Please try again.");
else if (UserNumber > SelectedNumber)
Console.WriteLine("Wrong.Please try again.");
else
{
Console.WriteLine("Correct! The number is {0}. Again? (1 or 2)");
playagain = Convert.ToInt32(Console.ReadLine());;
while (playagain != 1 amp;amp; playagain !=2)
{
Console.WriteLine("Invalid answer. Again? Y or N");
playagain = Convert.ToInt32(Console.ReadLine());
}
if (playagain.Equals(2))
GameOver = true;
else
SelectedNumber = ran.Next(0, UserMaxValue);
}
}
}
}
Комментарии:
1. Хорошо, вы написали некоторый код. Теперь пришло время ее отладить. Устанавливайте точки останова, проверяйте переменные и наблюдайте за выполнением кода построчно.
2. Я думаю, это должно работать неправильно.
Ответ №1:
Это:
SelectedNumber = ran.Next(0, UserMaxValue);
Вы запускаете это ДО того, как предложите пользователю ввести значение для UserMaxValue
, поэтому эффективно вы делаете
SelectNumber = ran.Next(0, 0);
Не очень случайно, когда есть только один выбор, и этот выбор является 0
… особенно, когда вы разрешаете только догадки между 1
и максимальным значением, которое будет предоставлено позже.
Комментарии:
1. Большое вам спасибо, Марк Би!! Я внес это изменение, и было создано случайное число, отличное от «0»! Теперь моя единственная другая проблема заключается в том, что вместо того, чтобы возвращаться к моему первому оператору «do» (установка максимального значения), моя программа просто просит пользователя угадать в том же диапазоне значений. У кого-нибудь есть какие-либо предложения или подсказки о том, как это изменить?
2. @VictoriaN Будут ли эти вопросы и ответы повторяться, пока вы не исправите все свои ошибки? Пожалуйста, по одному вопросу за раз….
3. И это не служба отладки. САМАЯ важная часть обучения программированию — это обучение отладке. Если вы даже не ПОПЫТАЕТЕСЬ разобраться в этом самостоятельно, вы ничему не научитесь.
4. Верно, верно! Еще раз спасибо за помощь 🙂 Я постараюсь снять остальное и поработать над этими навыками программирования!