如何从用户提供的名称列表中获取n个随机名称?现有代码问题咨询
如何修改C#代码实现从输入列表中随机抽取n个名称?
我来帮你搞定这个需求!先梳理下你现有代码里的几个小问题,然后一步步修改实现随机抽取n个名称的功能:
原代码的基础问题
- 没有输入终止逻辑:当前的
while(true)会无限循环,用户没法停止输入名称 - 列表输出错误:
Console.WriteLine(namenListe)会直接打印List的类型信息,而不是具体的名称,应该用namenListe[i]来遍历输出元素
修改后的完整代码
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main() { var namenListe = new List<string>(); // 第一步:收集用户输入的名称,支持终止输入 Console.WriteLine("Geben Sie die Namen ein (geben Sie eine leere Eingabe ein, um die Eingabe zu beenden):"); while (true) { Console.Write("Name: "); string name = Console.ReadLine().Trim(); // 输入空字符串时终止输入 if (string.IsNullOrEmpty(name)) { break; } namenListe.Add(name); Console.WriteLine($"Aktuelle Namenliste: {string.Join(", ", namenListe)}"); } // 检查是否有输入的名称 if (namenListe.Count == 0) { Console.WriteLine("Es wurden keine Namen eingegeben!"); return; } // 第二步:获取要抽取的数量n int anzahlZuZiehen = 0; while (true) { Console.Write($"Geben Sie die Anzahl der zu ziehenden Namen ein (max {namenListe.Count}): "); string eingabe = Console.ReadLine(); // 验证输入是否为有效数字,且不超过列表长度 if (int.TryParse(eingabe, out anzahlZuZiehen) && anzahlZuZiehen > 0 && anzahlZuZiehen <= namenListe.Count) { break; } Console.WriteLine($"Ungültige Eingabe! Bitte geben Sie eine Zahl zwischen 1 und {namenListe.Count} ein."); } // 第三步:随机抽取n个不重复的名称 var random = new Random(); // 用洗牌法:先打乱列表,再取前n个元素 var gemischteListe = namenListe.OrderBy(x => random.Next()).ToList(); var gezogeneNamen = gemischteListe.Take(anzahlZuZiehen).ToList(); // 输出结果 Console.WriteLine("\nDie zufällig gezogenen Namen sind:"); foreach (var name in gezogeneNamen) { Console.WriteLine($"- {name}"); } } }
关键功能解释
- 输入终止逻辑:当用户输入空字符串时,跳出输入循环,停止收集名称
- 输入验证:抽取数量时,确保用户输入的是有效数字,且不超过已输入的名称总数,避免报错
- 随机抽取实现:用
OrderBy(x => random.Next())对列表进行随机洗牌,然后取前n个元素,这样能保证抽取的名称不重复。如果你允许重复抽取(比如同一个名称可以被选中多次),可以改成直接生成随机索引并从原列表中取值:var gezogeneNamen = new List<string>(); for (int i = 0; i < anzahlZuZiehen; i++) { int zufaelligerIndex = random.Next(namenListe.Count); gezogeneNamen.Add(namenListe[zufaelligerIndex]); }
内容的提问来源于stack exchange,提问作者Hadissnp
相关产品推荐
相关产品推荐

