2015-07-15 4 views
2

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

Я не знаю, почему, но когда я иду в меню отладки, он показывает «значение с, как Count = 1, но затем list2» list1 значение s как 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. 
        } 
       } 
      } 
     }` 
+0

@David Вы были правы! Большое вам спасибо за вашу помощь! Я очень ценю это. – PtempestC

ответ

0

Try объявить 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); 
+0

Может быть, только один комментарий. Когда вы сравниваете строки, вы должны быть осторожны, потому что String является и объектом. Я бы рекомендовал вам использовать '.Equals()' – David