2012-06-14 2 views
3

Что-то не так с моим кодом. Я преподаю себе C#, и одна из проблем в этой главе заключалась в том, чтобы побудить пользователя к 10 номерам, хранить их в массиве, а не запрашивать 1 дополнительный номер. Затем программа скажет, добавляет ли дополнительный номер один из чисел в массиве. Теперь то, что у меня ниже, работает, но только если я вхожу в число сравнения меньше 10, которое является размером массива.Сравнение в массиве

Я не уверен, как это исправить. Я не уверен, как сделать сравнение. Я сначала пробовал цикл FOR, который работал, но пробежал цикл и отобразил сравнение со всеми 10 номерами, чтобы вы получили 9 строк No! и 1 строка «Да!». Я сделал паузу; который остановил его, подсчитав все 10, но если бы я вошел в число 5 для сравнения, то я бы получил 4 строки No! и 1 Да !. Ниже был единственный способ заставить его работать надежно, но только до тех пор, пока число не выходит за границы массива.

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

 int[] myNum = new int[10]; 
     Console.WriteLine("Starting program ..."); 
     Console.WriteLine("Please enter 10 numbers."); 

     for (int i = 0; i <= 9; ++i) 
     { 
      Console.Write("Number {0}: ", i + 1); 
      myNum[i] = Int32.Parse(Console.ReadLine()); 
     } 

     Console.WriteLine("Thank you. You entered the numbers "); 
     foreach (int i in myNum) 
     { 
      Console.Write("{0} ", i); 
     } 

     Console.WriteLine(""); 
     Console.Write("Please enter 1 additional number: "); 
     int myChoice = Int32.Parse(Console.ReadLine()); 
     Console.WriteLine("Thank you. You entered the number {0}.", myChoice); 

     int compareArray = myNum[myChoice - 1]; 

     if (compareArray == myChoice) 
     { 
      Console.WriteLine("Yes! The number {0} is equal to one of the numbers you previously entered.", myChoice); 
     } 
     else 
     { 
      Console.WriteLine("No! The number {0} is not equal to any of the entered numbers.", myChoice); 
     } 

     Console.WriteLine("End program ..."); 

     Console.ReadLine(); 

ответ

3

Если вы включите пространство имен System.Linq (или, если вы измените тип тупит быть что-то, что реализует ICollection<T>, как List<T>), вы можете использовать myNum.Contains(myChoice), чтобы увидеть, если значение myChoice соответствует одному из значений в myNum. array.Contains возвращает логическое значение, равное true, если указанное значение найдено в массиве и false, если это не так.

Вы можете обновить свой код, чтобы использовать это как так:

//int compareArray = myNum[myChoice - 1]; // This line is no longer needed 

    if (myNum.Contains(myChoice)) 
    { 
     Console.WriteLine("Yes! The number {0} is equal to one of the numbers you previously entered.", myChoice); 
    } 
    else 
    { 
     Console.WriteLine("No! The number {0} is not equal to any of the entered numbers.", myChoice); 
    } 
+0

Обратите внимание, что метод '.Contains()' не будет компилироваться, если вы также не используете 'System.Linq;' в вашем .cs-файле. Это «метод расширения», предоставляемый Linq, а не метод класса массива. – CodingWithSpike

+0

Хорошая точка. Я забыл про это. –

+0

Использование System.Linq; включен по умолчанию, когда я создаю новое приложение консоли C#. Это сработало очень хорошо. Так очень просто. – Trido

1

Если вы ищете чисел, которые, безусловно, от 1 до 10, а затем, прежде чем использовать

int compareArray = myNum[myChoice - 1]; 

чек, если это по стоимости 10. Например:

while(myChoice > 10) 
{ 
    Console.Write("Please choose a number less than or equal to 10: "); 
    myChoice = Int32.Parse(Console.ReadLine()); 
} 

Преимущество помещения его в цикл while вместо тега if означает, что, когда пользователь вводит другой номер, значение myChoice будет переписываться и сравниваться. Если они вводят число более 10, оно будет отвечать Please choose a number less than or equal to 10., пока номер, который они вводят, не будет равен 10: `Затем ваша программа будет продолжена.

Однако, если вы хотите, чтобы сравнить ее с массивом, а не ставить в фиксированном сравнении чисел, рассмотрим следующий while цикл:

while(myChoice > myNum.Length) 
{ 
    Console.Write("Please choose a number less than or equal to {0}: ", myNum.Length); 
    myChoice = Int32.Parse(Console.ReadLine()); 
} 

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

+0

Единственная проблема с первой частью заключается в том, что в исходной задаче массив содержит список из 10 произвольных чисел (а не только числа 1-10). – Robotnik

+0

Я понимаю, но он пытался запустить ввод в качестве индекса. Это решает проблему «IndexOutOfBounds». –

4

Вы были на правой track- вы хотите проходной массив в тупите и сравнить каждый элемент с переменной MyChoice. Если вы не хотите печатать, соответствует ли каждый элемент массива, создайте новую переменную и используйте ее, чтобы отслеживать, находили ли вы совпадение или нет. Затем после цикла вы можете проверить эту переменную и распечатать свой вывод. Обычно для этого используется переменная bool - установите для нее значение false, а затем true, когда вы найдете совпадение.

bool foundMatch = false; 
for (int i = 0; i < 10; i++) { 
    if (myNum[i] == myChoice) { 
     foundMatch = true; 
    } 
} 
if (foundMatch) { 
    Console.WriteLine("Yes! The number {0} is equal to one of the numbers you previously entered.", myChoice); 
} 
+0

Это сработало, спасибо за это. – Trido

0

Вы хотите сравнить последнее, 11-е значение и попытаться определить, находится ли он в массиве из 10 предыдущих записей?

Try:

for(int i = 0; i < array.length - 1; i++;) 
{ 
    If(array[i] == input) 
     return true; 
} 

return false; 

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

Редактировать: Если кто-то хочет проверить это или заполнить его в правильном синтаксисе, продолжайте. Я опубликовал эту чертову схему с телефона.

Смежные вопросы