如何计算数组c#中每个元素的每次出现次数

本文关键字:元素 何计算 计算 数组 | 更新日期: 2023-09-27 18:11:35

我正在尝试构建一个程序,用户在其中输入一系列数字(int(并将其存储在一个数组中,计算每个数字的输入次数并返回每个数字的计数。我还跟踪输入的有效值和无效值的总数,但它们不必排序,只需计数。

我的问题在于,按照我的教授的指示,我们还不允许使用集体条款。我们还没有声明隐式局部变量,他也不希望我们使用var和列表。

我能够计算有效条目和无效条目的数量,但在计算数组中每个元素的出现次数时遇到了问题。

这是我遇到问题的特定循环,它列出了数组中的每个位置,例如0、1、2,而不是计算每个数字的出现次数。

for (int i = 0; i < values.Length; i++)
Console.WriteLine("Value {0} was entered: {1} time(s)", values[i], i);


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Testing7._1OutAgain
{
class Program
{
    static void Main(string[] args)
    {
        string inputValue;
        int numberOfValues = 0,
            intValue,
            incorrectValues = 0;
        Console.Write("This program contains the following test data and will" +
            " return the values to you, tell you how many total values were inputted" +
            " and tell you how many times each of the values were repeated.'n'n");
        //Get array size
        Console.Write("How many numbers will you enter?'t'n");
        string stringSize = Console.ReadLine();
        int arraySize = Convert.ToInt32(stringSize);
        int[] values = new int[arraySize];

        //Fill array and count valid entry with numberOfValues++, invalid with incorrectValues
        while (numberOfValues < arraySize)
        {
            Console.WriteLine("Enter value: ");
            inputValue = Console.ReadLine();
            intValue = Convert.ToInt32(inputValue);
            if (intValue >= 1 && intValue <= 10)
            {
                values[numberOfValues] = Convert.ToInt32(inputValue);
                numberOfValues++;
            }
            else
            {
                Console.WriteLine("Incorrect value.");
                incorrectValues++;
            }
        }
        for (int i = 0; i < values.Length; i++)
            Console.WriteLine("Value {0} was entered: {1} time(s)", values[i], i);
        Console.WriteLine("'n'nTotal number of values = {0}", numberOfValues);
        Console.WriteLine("'n'nTotal number of incorrect values = {0}", incorrectValues);
        Console.ReadKey();
    }
  }
}

这是我在这里的第一篇文章,我研究了关于这个问题的其他解决方案,我看到了一些使用group子句的优秀解决方案,但我不被允许这样做。非常感谢您的帮助,我希望这个问题有意义,我只是想成为一个更好的程序员。如果不是很复杂的话,我很感激你的帮助,并向你道歉。我是编程新手。

如何计算数组c#中每个元素的每次出现次数

例如,您可以创建一个字典来存储该信息。创建一个字典变量,在其中声明其他变量,如下所示:

static void Main(string[] args)
{
    string inputValue;
    int numberOfValues = 0,
        intValue,
        incorrectValues = 0;
    Dictionary<int, int> ocurrences = new Dictionary<int, int>();

    //....rest of code bellow
}

然后在你的while循环中这个:

while (numberOfValues < arraySize)
{
       Console.WriteLine("Enter value: ");
       inputValue = Console.ReadLine();
       intValue = Convert.ToInt32(inputValue);

       if (intValue >= 1 && intValue <= 10)
       {
            if (!ocurrences.ContainsKey(intValue))
            {
                ocurrences.Add(intValue, 0);
            }
            values[numberOfValues] = Convert.ToInt32(inputValue);
            numberOfValues++;
            ocurrences[intValue]++;
       }
       else
       {
             Console.WriteLine("Incorrect value.");
             incorrectValues++;
       }
}

提取这样的信息:

//Dont do this one...
//for (int i = 0; i < values.Length; i++)
     // Console.WriteLine("Value {0} was entered: {1} time(s)", values[i], i);
foreach (KeyValuePair<int, int> pair in ocurrences)
{
    Console.WriteLine("Number {0} occured {1} times.",pair.Key,pair.Value);
}
   for (int i = 0; i < values.Length; i++)
        Console.WriteLine("Value {0} was entered: {1} time(s)", values[i], i);

你基本上是在遍历你的数组,并说出哪个元素在哪个位置。你似乎想要的是数你的物品。

因此,对于每个项,您都需要对数组进行迭代,并计算它出现的次数。您必须用另一个循环或一个方法更改for循环中的最后一个i,该方法将遍历数组的所有项,每次它找到您要查找的项(原始values[i](时,它都会递增一个计数器,然后您将获得该counter,而不是i

我将让您为此编写代码,因为从这一点来看,这是微不足道的,而且这毕竟是您的家庭作业:(

使用int.TryParse(inputValue, out intValue)而不是intValue = Convert.ToInt32(inputValue)来避免错误