#c# #visual-studio
#c# #visual-studio
Вопрос:
В настоящее время я работаю над математической игрой в C # windows form. Мне нужно сгенерировать 2 случайных числа 1-99 и отобразить их для каждой математической функции. У меня есть две кнопки: одна для запуска игры, а другая для отправки ответа. Моя ошибка заключалась в том, что я сделал два отдельных набора случайных чисел, чтобы кнопка «Пуск» имела разные случайные числа от кнопки отправки. Я хочу иметь одинаковые случайные числа для каждого раздела, как мне это сделать? У меня есть идея поместить его в общедоступный класс form1, но он продолжает говорить, что у меня ошибка.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MathLearning
{
public partial class Form1 : Form
{
//This is where I believe it is supposed to go
//Random ranNum = new Random();
//int num1 = ranNum.Next(1, 100);
//int num2 = ranNum.Next(1, 100);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnStart_Click(object sender, EventArgs e)
{
btnStart.Text = "Next";
if (rdoAddition.Checked)
{
int answer = num1 num2;
lblQuestion.Text = $"{num1 " " num2 "?"}";
}
if (rdoSubtraction.Checked)
{
int answer = num1 / num2;
lblQuestion.Text = $"{num1 " / " num2 "?"}";
}
if (rdoMultiplication.Checked)
{
int answer = num1 * num2;
lblQuestion.Text = $"{num1 " * " num2 "?"}";
}
if (rdoDivison.Checked)
{
int answer = num1 / num2;
lblQuestion.Text = $"{num1 " / " num2 "?"}";
}
}
private void btnSubmit_Click(object sender, EventArgs e)
{
Random ranNum = new Random();
int num1 = ranNum.Next(1, 100);
int num2 = ranNum.Next(1, 100);
int i = 0;
if(rdoGenderM.Checked)
{
if (rdoAddition.Checked)
{
int answer = num1 num2;
if(int.Parse(txtAnswer.Text) == answer)
{
lblQuestion.Text = $"{"Good Job SirnYou got " i " correct Out of " i " problems."}";
}
else
lblQuestion.Text = $"{num1 " " num2 "?nThe answer is " answer}";
}
}
//else if(rdoGenderF.Checked)
//{
// lblQuestion.Text = $"{"Good Job MadamnYou got " i " correct Out of " i " problems."}";
//}
//else
// lblQuestion.Text = $"{"Good Job Unknown gendernYou got " i " correct Out of " i " problems."}";
}
}
}
Комментарии:
1. Вы правильно считаете. Удалите код из in
btnSubmit_Click
и поместите его туда, куда вы думаете.2. Вы также должны использовать
decimal
, а неint
как сint
, когда вы делаете9 / 2
ответ, который вы получаете4
, нет4.5
. Вам нужноdecimal
(илиdouble
) получить, ну, десятичные числа.
Ответ №1:
Вы на правильном пути, просто инициализируйте их в конструкторе или где бы это ни имело смысл.
private Random ranNum = new Random();
private int num1;
private int num2;
public Form1()
{
InitializeComponent();
num1 = ranNum.Next(1, 100);
num2 = ranNum.Next(1, 100);
}
Более длинная история
Инициализаторы полей / свойств не могут получить доступ к нестатическим элементам, таким как ваше случайное поле, в этом случае это привело бы к введению логики инициализации, зависящей от порядка, которая легко ломается и зависит от реализации. Однако вы можете получить доступ к элементам экземпляра в конструкторе. Во время вызова конструктора были вызваны все другие инициализаторы полей и свойств, что делает безопасным вызов членов экземпляра.
Ответ №2:
Это должно сработать, каждый раз, когда вы нажимаете «Пуск», он будет генерировать новые числа.
using System.Collections.Generic;
using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace MathLearning
{
public partial class Form1 : Form
{
//This is where I believe it is supposed to go
Random ranNum = new Random();
int num1 = 0;
int num2 = 0;
int i = 0;
int numProblems = 0;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnStart_Click(object sender, EventArgs e)
{
btnStart.Text = "Next";
int num1 = ranNum.Next(1, 100);
int num2 = ranNum.Next(1, 100);
if (rdoAddition.Checked)
{
int answer = num1 num2;
lblQuestion.Text = $"{num1 " " num2 "?"}";
}
if (rdoSubtraction.Checked)
{
int answer = num1 / num2;
lblQuestion.Text = $"{num1 " / " num2 "?"}";
}
if (rdoMultiplication.Checked)
{
int answer = num1 * num2;
lblQuestion.Text = $"{num1 " * " num2 "?"}";
}
if (rdoDivison.Checked)
{
int answer = num1 / num2;
lblQuestion.Text = $"{num1 " / " num2 "?"}";
}
numProblems ;
}
private void btnSubmit_Click(object sender, EventArgs e)
{
if(rdoGenderM.Checked)
{
if (rdoAddition.Checked)
{
int answer = num1 num2;
if(int.Parse(txtAnswer.Text) == answer)
{
i ;
lblQuestion.Text = $"{"Good Job SirnYou got " i " correct Out of " numProblems " problems."}";
}
else
lblQuestion.Text = $"{num1 " " num2 "?nThe answer is " answer}";
}
}
//else if(rdoGenderF.Checked)
//{
// lblQuestion.Text = $"{"Good Job MadamnYou got " i " correct Out of " numProblems " problems."}";
//}
//else
// lblQuestion.Text = $"{"Good Job Unknown gendernYou got " i " correct Out of " numProblems " problems."}";
}
}
}
Комментарии:
1. OP объявляется
int answer
вbtnStart_Click
методе. Вы сделали то же самое. Но это не работает — если вы собираетесь показывать весь этот код, вы должны убедиться, что он работает.