显示在数组中找到特定数字的次数

Show how many times a specific number is found in an array

我的代码的第一部分是将输入数字放入数组的地方,这部分工作正常。在第二部分中,您需要读入一个搜索词并在数组中搜索搜索词。搜索后,我需要显示在数组中找到搜索项的次数。第二部分是我试过的但是没有用。

int[] number = new int[20];
int i = 0;
int notnull = 1;
while ( ( i < 20 ) && ( notnull != 0 ) )
{
  Console.Write("Give a number <0 = stop> : ");
  number[i] = int.Parse(Console.ReadLine());
  notnull = number[i];
  i++;
}

Console.WriteLine("Give searchterm (number): ");
int searchterm = int.Parse(Console.ReadLine());
int count = 1;
if ( searchterm == number[i] )
  count++;

Console.WriteLine("The number {0} shows up {1} times", searchterm, count);

您可以使用 LINQ 的 Count():

轻松计算 Array 或 IEnumerable 中一般情况下必须满足特定条件的项目
Console.WriteLine("Give searchterm (number): ");
int searchterm = int.Parse(Console.ReadLine());
int count = number.Count(i => i == searchterm);
Console.WriteLine("The number {0} shows up {1} times", searchterm, count);

你可以试试这个:

using System.Linq;
using System.Collections.Generic;

static void Test()
{
  int capacity = 20;
  List<int> numbers = new List<int>(capacity);

  Console.WriteLine($"Enter up to {capacity} numbers (0 or not an integer to stop): ");
  int value = 0;
  do
  {
    int.TryParse(Console.ReadLine(), out value);
    if ( value != 0 )
      numbers.Add(value);
  }
  while ( numbers.Count < capacity && value != 0 );

  if ( numbers.Count > 0 )
  {
    Console.WriteLine();
    Console.WriteLine("Enter a number to search occurences: ");
    int.TryParse(Console.ReadLine(), out value);
    if ( value > 0 )
    {
      Console.WriteLine();
      Console.WriteLine("The number {0} shows up {1} times",
                        value, 
                        numbers.Count(n => n == value));
    }
  }
}

样本:

Enter up to a number (0 or not an integer to stop):
1
2
3
1
5
6
7
3
2
0

Enter un number to search occurences:
3

The number 3 shows up 2 times

首先,让我们去掉你的情况下的 幻数 - 20;让我们更改集合的类型:数组没有 AddList<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 可以使用。让我们使用技术 (TryParse)

获得 searchterm
   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");