#c#
#c#
Вопрос:
мне нужна помощь с моим кодом. я должен создать математическую игру с вычитанием без получения отрицательных значений, но мой код, похоже, не работает.
int c = a - b;
if (c < 0)
{
Random ro = new Random();
a = ro.Next(10) 1;
b = ro.Next(10) 1;
lb_getal1.Text = a.ToString();
lb_getal2.Text = b.ToString();
}
if (txt_antwoord.Text == c.ToString())
{
MessageBox.Show("You provided the right answer!");
score = 1;
Random r = new Random();
a = r.Next(10) 1;
b = r.Next(10) 1;
lb_getal1.Text = a.ToString();
lb_getal2.Text = b.ToString();
}
else
{
MessageBox.Show("You were wrong!");
}
if (score == 5)
{
MessageBox.Show("You answered 5 answers correctly! Well done!");
this.Close();
RM_menu form = new RM_menu();
form.Show();
}
Комментарии:
1. Что именно не работает так, как ожидалось?
2. Пожалуйста, используйте английскую строку при публикации вашего кода. Другие не поймут локализованную строку.
3. Отредактируйте свой вопрос и добавьте ожидаемое поведение, а что не работает
Ответ №1:
В вашем коде есть несколько проблем. Первое, что нужно улучшить: используйте только один экземпляр Random
.
Random
Класс предоставляет псевдослучайные числа из списка. Если вы создаете экземпляр с конструктором по умолчанию new Random()
, экземпляр инициализируется начальным значением, взятым из текущего времени. Поскольку между вашими двумя вызовами проходит не так много времени, оба экземпляра, вероятно, используют одно и то же начальное значение, и вы получите одинаковые значения для a
и b
снова.
Я предлагаю создать только один экземпляр и сохранить его в переменной-члене вашего класса.
Вторая проблема: если ваша первая попытка дает отрицательный результат c
, вы повторяете попытку только один раз, но это не гарантирует, что на этот раз результат будет положительным. Лучший подход — сравнить a
и b
и переключить, если b
больше.
Таким образом, ваш код может выглядеть следующим образом:
public class YourGame : Form // I guess it's a Form
{
private Random randomGenerator = new Random();
private int a;
private int b;
private int score;
public void CreateQuestion()
{
a = randomGenerator.Next(10) 1;
b = randomGenerator .Next(10) 1;
if (b > a)
{
// switch values
int tmp = b;
b = a;
a = tmp;
}
lb_getal1.Text = a.ToString();
lb_getal2.Text = b.ToString();
}
private void OnAnswer()
{
int c = a - b; // will never be negative as we checked a and b above
if (txt_antwoord.Text == c.ToString())
{
MessageBox.Show("You provided the right answer!");
score = 1;
CreateQuestion();
}
else
MessageBox.Show("You were wrong!");
if (score == 5)
{
MessageBox.Show("You answered 5 answers correctly! Well done!");
this.Close();
RM_menu form = new RM_menu();
form.Show();
}
}
}
Комментарии:
1. хороший ответ на неаккуратный вопрос.
2. @Natrium бывают дни, когда я просто голосую за закрытие, а потом бывают дни, когда я думаю: «Эй, это очевидно, давайте поможем»…
Ответ №2:
Я не пытаюсь решить эту проблему, но пытаюсь дать некоторые рекомендации о том, как убедиться, что значение не будет меньше нуля при использовании Random
.
int a, b, c;
Random ro;
ro = new Random();
b = ro.Next(10);
a = ro.Next(b, 10);
c = a - b;
Как вы можете видеть, сначала мы устанавливаем случайное значение в b
using ro.Next(10)
, а затем указываем минимальное значение с помощью ro.Next(b, 10)
При этом гарантируется, что значение при выполнении не будет меньше нуля a-b
.
Комментарии:
1. Хорошая идея использовать эту
Next
перегрузку.
Ответ №3:
вы можете использовать Math.Abs
int c = Math.Abs (a-b);
Комментарии:
1. Как это решает проблему? Нет… Какую проблему, по вашему мнению, вы решали?
2. итак, у этого парня есть 2 числа, и он не хочет вычитать их таким образом, чтобы получить отрицательный ответ, поэтому он, вероятно, даже хотел поменять местами эти числа, как у Рене в его коде. Итак, я просто предложил абсолютную функцию, поэтому вам не придется проверять отрицательное значение или что переменная слева от вычитания должна быть больше. Вы думаете, это не отвечает на вопрос? поскольку вопрос в любом случае расплывчатый, получит он полный ответ или нет, он должен знать, что функция Abs существует.
3. и ваш ответ, и ваш комментарий имеют смысл, но я до сих пор понятия не имею, с какой именно проблемой сталкивается OP.