#c# #list #winforms #object
#c# #Список #winforms #объект
Вопрос:
Моя программа выбирает объект (ion) из списка объектов (ions) случайным образом и позволяет пользователю вводить то, что они считают значениями заряда и полярности, однако, когда я сравниваю входные данные со значениями случайного объекта (ion), принимается только первый объект в списке вместо фактических переменных. Я проверил, чтобы убедиться, что переменные меняются, и даже при сопоставлении он будет принимать только заряд и полярность первого иона в списке.
this is the list of objects, ion guesser is declared outside
int IonGuesser;
public class Ion
{
public string Charge; // 1-3 no need to make int as no maths are performed
public string Polarity; // or -
public string Name; // Self explanatory
public string Formula; // chemical formula eg OH
}
List<Ion> Ions = new List<Ion>
{
new Ion {Charge = ("1"), Polarity =("-"),Name = ("Hydroxide"), Formula = ("OH")},
new Ion {Charge = ("1"), Polarity =(" "),Name = ("Hydron"), Formula = ("H")},
new Ion {Charge = ("1"), Polarity =(" "),Name = ("Lithium"), Formula = ("Li")},
new Ion {Charge = ("1"), Polarity =(" "),Name = ("Sodium"), Formula = ("Na")},
при нажатии этой кнопки извлекается случайный ион и отображается формула для пользователя
private void NextIonButton_Click(object sender, EventArgs e)
{
int IonGuesser = rnd.Next(Ions.Count);
var RandomIon = Ions[IonGuesser];
IonNameDisplay.Text = RandomIon.Formula;
}
ниже находится кнопка, которая должна проверять, правильно это или нет, она только скажет, что заряд («1») и полярность («-«) правильные, даже если это не так
private void IonSubmitButton_Click(object sender, EventArgs e)
{
int CorrectCounter = 0;
var RandomIon = Ions[IonGuesser];
if (ChargeDropDown.Text == RandomIon.Charge)
{
CorrectCounter ;
}
if (PolarityDropDown.Text == RandomIon.Polarity)
{
CorrectCounter ;
}
if (CorrectCounter == 2)
{
IonGuessStatus.Text = ("Correct");
}
else
{
IonGuessStatus.Text = ("Incorrect");
}
Итак, когда, скажем, выводится формула ion, равная Li, IonGuessStatus должен быть («правильным»), когда входные данные в выпадающих окнах равны (1) и ( ), однако он говорит «правильно» только тогда, когда входные данные равны (1) и (-)
Комментарии:
1. Я думаю, ваша проблема в том, что вы используете
IonGuesser
insideIonSubmitButton_Click
, и это всегда будет0
из-за того, что вы объявляете localIonGuesser
внутриNextIonButton_Click
. Кстати, вы можете сократить свой код, просто спросивChargeDropDown.Text == RandomIon.Charge amp;amp; PolarityDropDown.Text == RandomIon.Polarity
.2. Ion guesser объявлен вне обоих этих нажатий кнопок, он все еще будет локальным внутри них?, также спасибо за amp;amp; совет
3. Вам нужно преобразовать строку
int IonGuesser = rnd.Next(Ions.Count);
изNextIonButton_Click
вIonGuesser = rnd.Next(Ions.Count);
, иначе то, что вы делаете, скрывает внешний элементIonGuesser
(который останется прежним,0
).4. Это сработало, ты легенда, спасибо
Ответ №1:
удаление int из Int Ionguesser = rnd.Next(Ions.Количество);