如何实现参赛者数组的类别分配输入与各类别人数统计?
解决方案
首先,我们需要创建一个和参赛者姓名数组长度一致的类别数组,用来存储每个参赛者对应的类别。因为要通过索引关联姓名和类别,使用for循环会更直接——可以通过同一个索引i同时操作姓名数组和类别数组。
完整实现代码
// 假设competitors已经由用户输入得到 string[] attendeenames = new string[competitors]; for (int i = 0; i < competitors; i++) { Console.WriteLine($"请输入第{i+1}位参赛者的姓名"); attendeenames[i] = Console.ReadLine(); } // 创建存储类别的数组,和姓名数组一一对应 string[] participantCategories = new string[competitors]; // 统计各类别人数的变量 int countS = 0, countM = 0, countD = 0; // 循环为每个参赛者分配类别 for (int i = 0; i < competitors; i++) { string inputCategory; // 输入验证:确保用户输入有效的类别 do { Console.WriteLine($"请为参赛者【{attendeenames[i]}】分配类别(可选值:S、M、D)"); inputCategory = Console.ReadLine()?.Trim().ToUpper(); } while (inputCategory != "S" && inputCategory != "M" && inputCategory != "D"); // 存储类别 participantCategories[i] = inputCategory; // 同步统计人数 switch (inputCategory) { case "S": countS++; break; case "M": countM++; break; case "D": countD++; break; } } // 输出分配结果 Console.WriteLine("\n===== 参赛者类别分配结果 ====="); for (int i = 0; i < competitors; i++) { Console.WriteLine($"姓名:{attendeenames[i]},类别:{participantCategories[i]}"); } // 输出统计结果 Console.WriteLine("\n===== 类别人数统计 ====="); Console.WriteLine($"S类:{countS}人"); Console.WriteLine($"M类:{countM}人"); Console.WriteLine($"D类:{countD}人");
关键说明
- 用for循环的原因:需要通过索引
i同时关联attendeenames和participantCategories两个数组,foreach循环无法直接获取索引,所以for更合适。 - 输入验证:通过do-while循环确保用户输入的是有效的类别值,避免无效输入导致后续逻辑出错。
- 实时统计:在存储类别时直接更新计数变量,无需额外遍历数组统计,效率更高。
内容的提问来源于stack exchange,提问作者Shin
相关产品推荐
相关产品推荐

