输入字符串格式不正确,List <string> to Dictionary <int,int =“”>

时间:2016-08-25 10:12:42

标签: c# hashtable

我正在尝试创建一个程序,从控制台读取用户输入的整数,然后创建一个Dictionary<int, int>,最后输入所有输入的次数。 我的想法是收集每个条目,直到列表中的空行。然后我会解析它并创建字典,输入Key和时间类型为Value。

我在int integer = int.Parse(number);收到“未处理的异常:System.FormatException:输入字符串的格式不正确”,并且没有打印任何内容。

请您帮我理解代码分崩离析的地方。我是初学者,不知道如何纠正它。

static void Main(string[] args)
    {
        string input = "0";
        List<string> listNumbers = new List<string>();
        Console.WriteLine("Type several numbers and press Enter after each one:");
        while (input != string.Empty)
        {
            input = Console.ReadLine();
            listNumbers.Add(input);
        }

        IDictionary<int, int> intOccurences = new Dictionary<int, int>();
        foreach (string number in listNumbers)
        {
            int integer = int.Parse(number);
            int count;
            if (!intOccurences.TryGetValue(integer, out count))
            {
                count = 0;
            }
                intOccurences[integer] = count + 1;
        }
        PrintNumbers(intOccurences);
    }
        private static void PrintNumbers(IDictionary<int, int> intOccurences)
    {
        foreach (KeyValuePair<int, int> entry in intOccurences)
        {
            Console.WriteLine(
                "Number '{0}' occurs {1} time (s) in the input.", entry.Key, entry.Value);
        }
    }

3 个答案:

答案 0 :(得分:2)

考虑使用TryParse

        string possibleInteger ="12";
        int resultInteger;
        bool isCorrectInteger = int.TryParse(possibleInteger, out resultInteger);
        if (isCorrectInteger)
        {
            // add to dictionary
        }
        else
        {
            Console.WriteLine("Not a correct integer number");
        }

另外,请记住在解析数字和日期时考虑您的文化设置。例如,如果当前语言使用/不使用某些小数分隔符或thaus和分隔符,则最终可能会出现格式异常。如果它是您的一个因素,请考虑使用考虑到它的TryParse版本。

答案 1 :(得分:1)

可能的解决方案

替换

int integer = int.Parse(number);

使用

int integer;

var isInteger = int.TryParse(number, out integer);

if(!isInteger) continue; // Not a number skip

if (!intOccurences.TryGetValue(integer, out count))
{
                count = 0;
}
  • 想法仍然存在,跳过非整数,否则设计一个机制来处理它们。你不能int.parse(<Non Integer>)

答案 2 :(得分:0)

您可以尝试在从控制台读取一行后立即直接转换为整数,并将它们添加到整数列表中。这使得一切都更容易理解。例如:

IDictionary<int, int> intOccurences = new Dictionary<int, int>();
List<int> allInputs = new List<int>();
while (input != string.Empty)
{
    input = Console.ReadLine();
    allInputs.Add(Convert.ToInt32(input));
}
foreach (int i in allInputs)
{
    int currentCount; //defaults to 0
    intOccurences.TryGetValue(i, out currentCount);
    frequencies[i] = currentCount + 1;
}