Проблемы со сравнением элементов из двух разных списков

В настоящее время я пытаюсь создать программу Typing Test. У меня проблемы со сравнением элементов внутри этих двух списков list1 (10 случайных слов) и list2 (10 пользовательских вводов). Вот сообщение об ошибке, которое я получаю: ArgumentOutOfRangeException was unhandled.

Я не уверен, почему, но когда я захожу в меню отладки, оно показывает значение list1 как Count = 1, но затем значение list2 как Count = 10. Все элементы в обоих списках являются строками. Итак, мой вопрос заключается в том, как мне сравнить элементы в этих списках по порядку (первый элемент первого списка с первым элементом второго списка) и так далее.

Я относительно новичок в кодировании, я не понимаю, почему приведенный ниже код не работает. Я пытался исправить это в течение нескольких часов, поэтому заранее спасибо за любую помощь!

`for (int i = 0; i < gameLength; i++) // The code below will loop 10 times
        {   
            List<string> list1 = new List<string>(); 
            string chosenWord = SelectWord(); // Selects a random word
            Console.Write(chosenWord + " "); // Prints the selected word
            list1.Add(chosenWord); // Adds the selected word to the list

            if (i == 9) // True once above code has been performed 10 times
            {   
                Console.WriteLine();
                List<string> list2 = new List<string>();

                for (int b = 0; b < 10; b++) // This will also loop 10 times
                {   
                    string userValue = UserInput(); // Gets user input
                    list2.Add(userValue); // Adds user value to list
                }

                for (int t = 0; t < 10; t++)
                {
                    if (list1[t] == list2[t]) // Here is the error
                    { 
                        score++;
                        Console.WriteLine(score);

                        /* The error occurs on the second pass
                         * when the value of t becomes 1, But i don't  
                        */ understand why that doesn't work.
                    }
                }
            }
        }`

person PtempestC    schedule 15.07.2015    source источник
comment
@ Дэвид Ты был прав! Большое вам спасибо за вашу помощь! Я очень ценю это.   -  person PtempestC    schedule 15.07.2015


Ответы (1)


Попробуйте объявить List<string> list1 = new List<string>(); вне первого цикла for, я думаю, ваша проблема в том, что вы объявляете list1 каждый раз, поэтому последнее количество итераций list1 равно только 1, потому что каждый раз вы делаете новый.

Я думаю, что это проблема.

На вашем месте я бы сделал что-то вроде этого:

List<string> list1 = new List<string>(); 
for (int i = 0; i < gameLength; i++) // The code below will loop 10 times
{   
    string chosenWord = SelectWord(); // Selects a random word
    Console.Write(chosenWord + " "); // Prints the selected word
    list1.Add(chosenWord); // Adds the selected word to the list
}

List<string> list2 = new List<string>();
for (int b = 0; b < 10; b++) // This will also loop 10 times
{   
    string userValue = UserInput(); // Gets user input
    list2.Add(userValue); // Adds user value to list
}

int score = 0;
for (int t = 0; t < 10; t++)
{
    if (list1[t] == list2[t]) // Now should work
    { 
        score++;        
    }
}

Console.WriteLine(score);
person David    schedule 15.07.2015
comment
Может быть, только один комментарий. Когда вы сравниваете строки, вы должны быть осторожны, потому что String является и объектом. Я бы порекомендовал вам использовать .Equals() - person David; 15.07.2015