将元素输入数组并检查元素是否已经存在

时间:2018-12-12 22:08:48

标签: c# arrays

我正在研究一个问题,我已经尝试过用for循环来尝试的所有方法,但是由于我只是从C#和整个编程领域入手,所以我不知道如何使它起作用几个星期前。

编写一个输入五个数字的应用程序。读取每个数字时,如果数组中不存在该数字,请搜索该数组,然后输出单词“ new”,然后将数字插入到数组中。如果数字确实存在于数组中,则输出“存在”。输入所有五个数字后,输出数组的内容。

这是我到目前为止所拥有的。感谢您的帮助

using System;

public class Program
{
   // Main method begins execution of C# application
   public static void Main(string[] args)
   {
      int[] array = new int[5];

      for (int i = 0; i < array.Length; i++)
      {
         Console.WriteLine("Enter a number:");
         array[i] = Convert.ToInt32(Console.ReadLine());

         for (int a = 0; a < 5; a++)
         {

            if (array[i] != array[a])
            {
               array[i] = int.Parse(Console.ReadLine());
               Console.WriteLine("new\n");
            }

         }

         array[i] = int.Parse(Console.ReadLine());
         Console.WriteLine("exists\n");
      }

      Console.WriteLine(array);
      Console.ReadKey();
   }
} // end class

4 个答案:

答案 0 :(得分:1)

首先,在实际开始编写代码之前,请先考虑一下解决方案

  1. 您需要一些用户输入,我们将使用一个变量来保存用户输入
  2. 您需要验证数组或结构中不存在这些值,这可以使用Contains方法来完成。
  3. 如果存在,我们将继续下一个用户输入并打印所需的消息。
  4. 如果该值不存在,我们将其添加并打印新消息

我们将执行此操作,直到结构的Count等于5。

供参考,请使用此While loopHashset.ContainsHashset

尝试一下:

var numbers = new HashSet<int>();   
    while(numbers.Count < 5)
    {
         Console.WriteLine("Enter a number:"); //1.
         var number = Convert.ToInt32(Console.ReadLine());

        if (numbers.Contains(number)) // 2.
        {
             Console.WriteLine("exists\n"); //3.
             continue;
        }

        Console.WriteLine("new\n"); //4.
        numbers.Add(number);
    }

    foreach (var n in numbers)
    {
        Console.WriteLine(n);
    }

答案 1 :(得分:0)

您的代码有几个问题。如果成功,则仅应增加数组索引-否则,缺失值将为零。在用户输入无效值的情况下验证输入也是一个好主意。您可以使用linq来检查值是否已存在于数组中:

这里是一个示例:

    static void Main(string[] args)
    {
        int[] array = new int[5];
        var index = 0; 
        while (index < array.Length)
        {
            Console.WriteLine("Enter a number:");
            var input = Console.ReadLine();
            var value = 0;
            if (!int.TryParse(input, out value))
            {
                Console.WriteLine("Error - value entered was not a number");
            }
            else
            {
                var match = array.Where(a => a == value);
                if (match.Any())
                {
                    Console.WriteLine("exists\n");
                }
                else
                {
                    array[index] = value;
                    Console.WriteLine("new\n");
                    index++;
                }
            }
        }

        foreach (var item in array)
        {
            Console.WriteLine(item);
        }

        Console.ReadKey();
    }

答案 2 :(得分:0)

.Any()中使用System.Linq。另外,您无需在循环中连续获取用户输入:

using System;
using System.Linq;

public class Program
{
  // Main method begins execution of C# application
  public static void Main(string[] args)
  {
    int[] array = new int[5];

    for (int i = 0; i < array.Length; i++)
    {
      Console.WriteLine("Enter a number:");
      // Get user input and convert to integer:
      int input = Convert.ToInt32(Console.ReadLine());

      // Check if given input is already in the array: 
      if (! array.Any(number => number == input))
      {
          array[i] = input;
          Console.WriteLine("new\n");
      }
      else 
      {
          Console.WriteLine("exists\n");
      }
    }

    // Print the contents of array separated by ','
    Console.WriteLine(string.Join(", ", array));
    Console.ReadKey();
  }
}

编辑:如果您希望用户完全填充数组,则可以使用另一个变体:

using System;
using System.Linq;

public class Program
{
  public static void Main(string[] args)
  {
    // Btw, if this is not an array of nullables,
    // we will not be able to insert a zero later, as
    // we will treat them as duplicates.
    int?[] array = new int?[5];

    for (int i = 0; i < array.Length; i++)
    {
      Console.WriteLine("Enter a number:");

      int input = 0;
      bool duplicateAttempt = false;
      do {
        // Get and convert the input.
        input = Convert.ToInt32(Console.ReadLine());
        // See if this number is already in.
        duplicateAttempt = array.Contains(input);
        // Report if we attempt to insert a duplicate.
        if (duplicateAttempt) Console.WriteLine("exists");
      } 
      while (duplicateAttempt); // Keep asking while we don't get a unique number.

      array[i] = input; // Store the number
      Console.WriteLine("new");
    }

    // Print the contents of array separated by ','
    Console.WriteLine(string.Join(", ", array));
    Console.ReadKey();
  }
}

答案 3 :(得分:0)

这似乎是一个家庭作业问题,所以我认为解释您做错了什么并告诉您应该做些什么……

这不会帮助您学习复制和粘贴其他人的答案。

using System;

public class Program
{
   // Main method begins execution of C# application
   public static void Main(string[] args)
   {
      int[] array = new int[5];

      for (int i = 0; i < array.Length; i++)
      {
         Console.WriteLine("Enter a number:");
// you are putting the value into your array here.  so it will always 'exist' below
         array[i] = Convert.ToInt32(Console.ReadLine());  

// you need to do this check before you insert the number into the array
// put the ReadLine into a variable, not directly into the array.  
// then check if it's in the array already 
         for (int a = 0; a < 5; a++)
         {

            if (array[i] != array[a])
            {
// here you are trying to read another value from the user.  
// Console.ReadLine() will always wait for user input
// use the variable from above.  but only after you have looped through all the items.
// and verified that it is not present
               array[i] = int.Parse(Console.ReadLine());
               Console.WriteLine("new\n");
            }

         }
// this is the third time you have assigned the number to the array
// and the third time you've asked for user input per loop
         array[i] = int.Parse(Console.ReadLine());
         Console.WriteLine("exists\n");
      }

      Console.WriteLine(array);
      Console.ReadKey();
   }
} // end class

总结:

您需要运行5次的for循环。

for循环将执行以下操作:

  • 将用户输入分配给变量
  • 循环遍历数组(第二个循环),看看它是否包含此变量
  • 如果找到数字,则将布尔值设置为true。 (找到)
  • 如果循环结束后,发现= false,则打印false
  • 还将数字添加到数组中(在外部循环的索引处可以)