Случайный объект, выбранный из списка, но при сравнении с пользовательским вводом принимается только первый элемент в списке

#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 inside IonSubmitButton_Click , и это всегда будет 0 из-за того, что вы объявляете local IonGuesser внутри 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.Количество);