输入字符串的格式不正确,List<String> 到 Dictionary<int, int>
Input string was not in a correct format, List<String> to Dictionary<int, int>
我正在尝试创建一个程序,从控制台读取用户输入的整数,然后创建一个 Dictionary<int, int>
,最后打印所有输入及其输入次数。
我的想法是收集每个条目,直到列表中出现一个空行。然后我会解析它并创建字典,其中包含键的输入和键入值的时间。
我在 int integer = int.Parse(number);
得到 "Unhandled Exception: System.FormatException: Input string was not in a correct format",但没有打印任何内容。
你能帮我理解代码在哪里崩溃吗?我是初学者,不知道如何改正。
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);
}
}
可能的解决方案
替换
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>)
您可以尝试在从控制台读取一行后立即直接转换为整数,并将它们添加到整数列表中。这也使一切都更容易理解。例如:
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;
}
考虑使用 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");
}
此外,请记住在解析数字和日期时考虑您的文化设置。例如,如果当前语言 uses/doesn 不使用某些小数点分隔符或万进制分隔符,您可能会遇到格式异常。如果这是您的一个因素,请考虑使用考虑到它的 TryParse 版本。
我正在尝试创建一个程序,从控制台读取用户输入的整数,然后创建一个 Dictionary<int, int>
,最后打印所有输入及其输入次数。
我的想法是收集每个条目,直到列表中出现一个空行。然后我会解析它并创建字典,其中包含键的输入和键入值的时间。
我在 int integer = int.Parse(number);
得到 "Unhandled Exception: System.FormatException: Input string was not in a correct format",但没有打印任何内容。
你能帮我理解代码在哪里崩溃吗?我是初学者,不知道如何改正。
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);
}
}
可能的解决方案
替换
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>)
您可以尝试在从控制台读取一行后立即直接转换为整数,并将它们添加到整数列表中。这也使一切都更容易理解。例如:
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;
}
考虑使用 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");
}
此外,请记住在解析数字和日期时考虑您的文化设置。例如,如果当前语言 uses/doesn 不使用某些小数点分隔符或万进制分隔符,您可能会遇到格式异常。如果这是您的一个因素,请考虑使用考虑到它的 TryParse 版本。