Во-первых, давайте избавимся от магических чисел - 20
в вашем случае;давайте изменим тип коллекции: массив не имеет Add
, который List<T>
обеспечивает:
List<int> number = new List<int>();
Тогда давайте будем осторожны с пользовательским вводом: что, если пользователь поставит bla-bla-bla
? Чтобы избежать сбоя , мы можем использовать TryParse
вместо Parse
:
while (true) {
// 0 is not a good choice; let it be Q (Quit) instead
Console.WriteLine("Give a number or Q to stop : ");
// Trim: let's be nice and tolerate trailing/leading spaces
string input = Console.ReadLine().Trim();
// Let's accept Q, q, quit, etc.
if (input.StartsWith("Q", StringComparison.OrdinalIgnoreCase))
break;
if (int.TryParse(input, out int value))
number.Add(value);
else
Console.WriteLine("Sorry, invalid input");
}
Теперь у нас есть number
для работы. Получим searchterm
по методике (TryParse)
int searchterm = -1; // initialization, let compiler be happy
while (true) {
Console.WriteLine("Give searchterm (number): ");
if (int.TryParse( Console.ReadLine(), out searchterm))
break;
Console.WriteLine("Sorry, invalid input");
}
Наконец, давайте вычислим count
;обычно для этого мы ставим Linq :
int count = number.Count(searchterm);
Однако, если вы хотите старые добрые циклы
int count = 0;
foreach (var item in number)
if (item == searchterm)
count += 1;
Последнее предложение - использовать интерполяция строк более читабельно, чем форматирование :
Console.WriteLine($"The number {searchterm} shows up {count} times");