namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        int[] codes = { 39835, 72835, 49162, 29585, 12653, 87350, 74783};

    public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {}

        private void label4_Click(object sender, EventArgs e)
        {}

        private void btnRandom_Click(object sender, EventArgs e)
        {
            Random mRandom = new Random();
            int randcode = mRandom.Next(0, codes.Length - 1);
        }
    }
}

Я хочу извлечь случайный код из массива, щелкнув «btnRandom» и сравнить его со строкой, но «int randcode» всегда выдает ошибку, когда я пытаюсь это сделать.

  private void button1_Click(object sender, EventArgs e)

  {
      if (txtCode.Text == randcode) ;
      {
          MessageBox.Show("working");  
      }
   }

Пытаюсь заставить его работать вот так.

-2
James 1 Мар 2016 в 00:12

3 ответа

Лучший ответ

У вас есть несколько проблем:

  • Ваш массив codes содержит целые числа. Ваше текстовое поле содержит строку.
  • Вы фактически не обращаетесь к массиву, когда выполняете сравнение - вы сравниваете целочисленный индекс со строкой.
  • После оператора if стоит точка с запятой, которой не должно быть.
  • randcode не определен на уровне класса, поэтому вы не можете получить к нему доступ из функции, отличной от той, в которой он был объявлен.

Короче, вам нужно что-то вроде этого:

int randcode;

private void btnRandom_Click(object sender, EventArgs e)
{
    Random mRandom = new Random();
    randcode = mRandom.Next(0, codes.Length - 1);
}

private void button1_Click(object sender, EventArgs e)
{
   if (txtCode.Text == codes[randcode].ToString()) 
   {
       MessageBox.Show("working");  
   }
}
2
Blorgbeard is out 29 Фев 2016 в 21:17

Это потому, что txtCode.Text - это строка, а randcode - целое число. Вы не можете сравнить эти два. Оба они должны быть строками или целыми числами. Попробуй это

if(txtCode.Text == randcode.ToString())

Я также отмечаю, что int randcode не входит в область действия этого метода. Вы использовали mkae randcode для переменной-члена, объявив ее в области класса

0
pm100 29 Фев 2016 в 21:15

Вам нужно либо преобразовать txtCode.Text в целое число, либо преобразовать randCode в string:

if (int.Parse(txtCode.Text) == randcode) ...

Или

if (txtCode.Text == randcode.ToString()) ....

Но есть кое-что, что вы можете / должны исправить:

  1. В методе Random.Next(min, max) max является эксклюзивным, поэтому вызов должен быть таким:

    int randcode = mRandom.Next(0, codes.Length);
    
  2. Вы объявляете ranCode внутри btnRandom_Click() и должны быть в классе Form1:

    public partial class Form1 : Form
    {
        int randCode;
        int[] codes = { 39835, 72835, 49162, 29585, 12653, 87350, 74783};
    
    ....
    
    randcode = mRandom.Next(0, codes.Length);
    
  3. И у вас есть ; после оператора if, поэтому MessageBox.Show("working"); будет выполняться независимо от результата.

В итоге код должен быть таким:

public partial class Form1 : Form
{
    int randCode;
    int[] codes = { 39835, 72835, 49162, 29585, 12653, 87350, 74783};
    ...

    private void btnRandom_Click(object sender, EventArgs e)
    {
        Random mRandom = new Random();
        randcode = mRandom.Next(0, codes.Length);
    }
    ...

    private void button1_Click(object sender, EventArgs e)
    {
        if (int.Parse(txtCode.Text) == randcode)
        {
            MessageBox.Show("working");  
        }
    }
    ...
}
1
Arturo Menchaca 29 Фев 2016 в 21:24