如何在C#汽车类数据录入中避免重复ID并重新提示用户?
实现Automobile数据录入时的重复ID检测
要解决录入过程中重复ID的问题,核心是在输入ID后立即校验是否已存在,若重复则重新输入,具体实现步骤如下:
- 拆分ID录入逻辑为循环结构,直到输入不重复的有效ID
- 每次输入ID后,遍历已完成录入的汽车对象(数组中当前索引之前的元素),检查ID是否重复
- 可选添加输入格式验证,确保用户输入的是符合要求的数值类型
修改后的主程序代码如下:
namespace AutomobileDemo { internal class Program { static void Main(string[] args) { Automobile[] cars = new Automobile[8]; double totalPrices = 0; for (int i = 0; i < cars.Length; ++i) { cars[i] = new Automobile(); int inputId; bool isDuplicate; // 循环获取不重复的ID do { Console.Write("ID number: "); // 验证输入是否为有效整数 while (!int.TryParse(Console.ReadLine(), out inputId)) { Console.WriteLine("请输入有效的整数ID!"); Console.Write("ID number: "); } // 检查已录入的汽车是否存在重复ID isDuplicate = false; for (int j = 0; j < i; j++) { if (cars[j].ID == inputId) { isDuplicate = true; Console.WriteLine("该ID已存在,请重新输入!"); break; } } } while (isDuplicate); cars[i].ID = inputId; // 录入其他属性并添加输入验证 Console.Write("Make: "); cars[i].Make = Console.ReadLine() ?? ""; Console.Write("Year: "); while (!int.TryParse(Console.ReadLine(), out int year)) { Console.WriteLine("请输入有效的年份!"); Console.Write("Year: "); } cars[i].Year = year; Console.Write("Price: "); while (!double.TryParse(Console.ReadLine(), out double price)) { Console.WriteLine("请输入有效的价格!"); Console.Write("Price: "); } cars[i].Price = price; totalPrices += cars[i].Price; Console.WriteLine(); } Array.Sort(cars); for (int i = 0; i < cars.Length; ++i) Console.WriteLine(cars[i].ToString()); Console.WriteLine("\nTotal of all prices: " + totalPrices.ToString("C")); } } }
关键代码说明
- ID重复校验循环:使用
do-while循环确保用户输入的ID不重复,每次输入后遍历数组中已完成录入的元素(j < i)对比ID - 输入格式验证:通过
int.TryParse和double.TryParse确保用户输入的是符合要求的数值类型,避免程序因输入错误崩溃 - 逻辑分离:将ID录入的校验逻辑独立出来,不影响其他属性的录入流程
内容的提问来源于stack exchange,提问作者Johan Cloete
相关产品推荐
相关产品推荐

