You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从用户提供的名称列表中获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 09:02:33