请问关于C#家庭作业的问题

时间:2010-11-20 22:50:55

标签: c#

问题是: 编写一个程序,将数据读入int类型的数组中。有效输入为0到10.您的程序应确定输入了多少个值。输出不同条目的列表以及该条目发生的次数。

我到目前为止:

using System;  
using System.Collections;
namespace ConsoleApplication25
{
class Program
{
   static void Main()
    {
        ArrayList list = new ArrayList();
        string inValue;

        Console.WriteLine("Please enter a value from 0-10");
        Console.WriteLine("To end the program, type 11");
        for (int i = 0; i < 11; i++)
        {
            Console.Write("Enter Value:", i);
            inValue = Console.ReadLine();
            i = int.Parse(inValue);
            list.Add(i);
            list.Remove(11);
            list.Sort();
        }
        int[] c = list.ToArray(typeof(int)) as int[];

        foreach (int value in c)
        {
            Console.WriteLine(value);
        }
        Console.WriteLine("There are {0} values.", list.Count);

        }
    }
}

我坚持的地方是显示每个值的计数。我已经尝试使用计数器设置if,并设置有休息的情况并且不成功。我们还没有开始使用LINQ。任何建议或提示将不胜感激。

谢谢,

杰森

6 个答案:

答案 0 :(得分:3)

使用Dictionary<int, int>存储值及其发生次数的计数。简短的例子:

Dictionary<int, int> values = new Dictionary<int, int>();
...
Console.Write("Enter Value:", i);
inValue = Console.ReadLine();
i = int.Parse(inValue);
if(values.ContainsKey(i))
{
    values[i]++;
}
else
{
    values.Add(i, 1);
}
...

答案 1 :(得分:3)

  1. 持续获取用户输入的方法是使用 while 循环,而不是 for 循环,在其中更改 i

    int i = 0;
    while (i < 11)
       get i, put it in the array
    
  2. 没有理由对数组列表进行排序,并且每次获得新输入时都没有理由对其进行排序。

  3. 如果您的输入限制为0..10,请设置11个元素的数组,检查您输入的项目,然后添加到计数中。伪代码应该是这样的:

    foreach input
       count[input]++
    

    然后,您将在每个计数单元格中获得结果。

答案 2 :(得分:0)

提示:

查看generic dictionaries数据结构,该数据结构将同时包含输入数据和每个数据。

答案 3 :(得分:0)

简而言之,您当前的方法是将所有输入的数字添加到列表中,然后对列表进行排序,这样您就可以获得1,2,3,4,4,4等。然后您想要找到列表中的所有唯一项目及其计数。

为此,您可以迭代数组和

  • 记住您正在阅读的当前值
  • 记住目前价值出现的次数

然后,当前值更改时,您将打印上一个值和您看到它的次数。这肯定会奏效,你应该能够以这种方式完成作业。

一些不相关的说明:

  • 最好使用List<int>代替ArrayList,因为您无需将其转换为int[] - 您只需使用列表并使用{{1从中获取整数值。
  • 阅读所有输入后,您应该只拨打list[i]
  • 使用Sort循环读取项目,您只能阅读11个(固定计数)项目
  • 如果值不是11,则只能调用for,而不是总是尝试删除值11。

正如其他人所提到的,您可以使用Add来“计算”项目数量,但这是对方法的完全更改。我认为完成你开始做的事情是个好主意......

答案 4 :(得分:0)

您可以使用数组来存储计数而不是实际的整数,并使用数组的索引作为值0-10。然后当您输出唯一值时,您只需检查哪些索引不具有count = 0;例如,array [1]存储输入值1的计数。

答案 5 :(得分:0)

一些提示:

  • 不要使用ArrayList类,它实际上已经过时了。如果要存储整数列表,请使用List<int>

  • 您的循环逻辑无法正常工作。如果输入值10,它将在循环结束时增加到11并退出。相反,如果值为11,则应使用do {} while()循环退出。

  • 请勿删除值11,而应避免在值为11时添加值。

  • 如果您使用该方法对列表进行排序,请在循环后执行此操作,而不是一遍又一遍地对其进行排序。

  • 您可以保留整数对列表以跟踪值和出现次数,也可以将所有值保留在列表中,对其进行排序,然后在显示结果时计算出现次数。 Dictionary<int, int>有助于保留整数对列表。

  • 由于有效值限制为0..10,您还可以使用包含11个项目的数组来计算出现次数。显示结果时,跳过计数为零的值。