使用Int.TryParse时输入非整数仍填充数组0值的解决方法咨询
问题描述
我正在跟随教程学习,尝试将代码中的Int.Parse替换为Int.TryParse。功能可正常运行,但当输入字符或字符串时,数组的对应槽位仍会被填充为0。我希望实现仅在输入为有效整数时才将其添加到数组,避免无效输入占用数组位置并填充0。
以下是我的代码:
Console.WriteLine("How many employee IDs would you like to register?"); string input = Console.ReadLine(); int length; if(int.TryParse(input, out length)) { int[] employeeIds = new int[length]; for (int i = 0; i < length; i++) { Console.Write("Please enter the employee ID."); string input2 = Console.ReadLine(); int id; if(int.TryParse(input2, out id)) { employeeIds[i] = id; } else { Console.WriteLine("Invalid input, please enter a valid integer number."); } } for (int i = 0; i < employeeIds.Length; i++) { Console.WriteLine($"ID {i + 1}: \t{employeeIds[i]}"); } } else { Console.WriteLine("Input is invalid, please input an integer number."); }
解决方法
方案一:使用List<int>动态存储(推荐)
数组是固定长度的,一旦创建就无法改变大小,这是导致无效输入占用位置的核心原因。改用List<int>可以动态添加有效输入,完全避免无效输入占用槽位的问题:
Console.WriteLine("How many employee IDs would you like to register?"); string input = Console.ReadLine(); int targetCount; if(int.TryParse(input, out targetCount)) { List<int> employeeIds = new List<int>(); while (employeeIds.Count < targetCount) { Console.Write("Please enter the employee ID: "); string input2 = Console.ReadLine(); int id; if(int.TryParse(input2, out id)) { employeeIds.Add(id); } else { Console.WriteLine("Invalid input, please enter a valid integer number."); } } // 如果需要转换为数组,可使用 employeeIds.ToArray() for (int i = 0; i < employeeIds.Count; i++) { Console.WriteLine($"ID {i + 1}: \t{employeeIds[i]}"); } } else { Console.WriteLine("Input is invalid, please input an integer number."); }
说明:
- 用
List<int>的Count属性判断是否已收集到足够的有效ID,只有输入有效时才调用Add方法添加元素 - 循环会持续执行,直到收集到用户指定数量的有效ID为止
- 如果后续需要数组类型,可通过
employeeIds.ToArray()转换
方案二:调整数组循环逻辑(保持数组使用)
如果坚持使用数组,可以在输入无效时让循环索引i递减,这样无效输入不会占用数组的槽位:
Console.WriteLine("How many employee IDs would you like to register?"); string input = Console.ReadLine(); int length; if(int.TryParse(input, out length)) { int[] employeeIds = new int[length]; for (int i = 0; i < length; i++) { Console.Write("Please enter the employee ID: "); string input2 = Console.ReadLine(); int id; if(int.TryParse(input2, out id)) { employeeIds[i] = id; } else { Console.WriteLine("Invalid input, please enter a valid integer number."); i--; // 输入无效时,索引回退,重新尝试当前位置的输入 } } for (int i = 0; i < employeeIds.Length; i++) { Console.WriteLine($"ID {i + 1}: \t{employeeIds[i]}"); } } else { Console.WriteLine("Input is invalid, please input an integer number."); }
说明:
- 当输入无效时,执行
i--,让下一次循环回到当前索引位置,重新接收输入 - 这样只有有效输入才会填充到数组的对应槽位,不会出现0占位的情况
内容的提问来源于stack exchange,提问作者Newbiewewbiebewbie
相关产品推荐
相关产品推荐

