Как сравнить два 2d массива - PullRequest
2 голосов
/ 28 апреля 2011

Я использую визуальную студию c # win form.,,У меня есть 2d массив текстовых полей, и у меня есть еще 2d массив действительных решенных судоку. Я хочу сравнить текст текстового поля с массивом судоку, но он не работает. Вот мой код:

        private void Isvalid()
        {
            for (int i = 0; i < 4; i++)
                for (int j = 0; j < 4; j++)
                    if (copy[i, j] == textbox[i, j].Text)
                        isvalid = true;


        }
        private void check()
        {
            Isvalid();
            if (isvalid)
                MessageBox.Show("NO");
            else
                MessageBox.Show("YES");

        }

Может кто-нибудь PLZ помочь мне.,,Спасибо заранее.,,Спасибо всем, кто ответил.,.

Ответы [ 4 ]

1 голос
/ 28 апреля 2011

Вы не устанавливаете (пере) переменную isvalid в значение false, если массивы не равны.

Результат метода Isvalid передается через общую переменную.Ваш код будет намного понятнее, если вы передадите результат сравнения в качестве результата метода.

private bool Isvalid()
{
    for (int i = 0; i < 4; i++) {
        for (int j = 0; j < 4; j++) {
            if (copy[i, j] != textbox[i, j].Text) {
                return false;  // If one is not equal, the two arrays differ
            }
        }
    }
    return true;
}

Теперь вы можете проверить:

if (Isvalid()) {
   // your code here
}

Еще лучше будет, если вы передадитедва массива в качестве аргументов.

1 голос
/ 28 апреля 2011

текстовое поле [i, j]. Текст

здесь перед преобразованием необходимо преобразовать значения в матрице текстового поля в целое число. Это решит проблему.

Также вам нужно установить значение false как false и после того, как оно станет истинным, вырваться из цикла

1 голос
/ 28 апреля 2011

Я бы поставил точку останова на строку

if (copy[i, j] == textbox[i, j].Text)

и визуально увидел бы, является ли то, что вы видите в текстовом поле, тем, что содержится в массиве.Это может быть так же просто, как и сравнение без учета регистра.

0 голосов
/ 28 апреля 2011

Попробуйте это:

private void Isvalid()
{
    isvalid = true;
    for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++)
            if (copy[i, j] != textbox[i, j].Text)
            {
                isvalid = false;
                return;
            }
}

В вашей процедуре вы устанавливаете isvalid в true, когда совпадает одно число. Вам лучше установить значение false, если число не совпадает.

...