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

C#实现随机抽姓名并移除已抽元素时出现重复抽取问题

问题原因

  • 你把姓名数组names和Random实例的定义放在了while循环内部,每一轮循环执行时都会重新初始化这两个变量:
    • 每次循环都会重新生成完整的4人姓名数组,上一轮对数组元素的修改自然不会保留
    • 短时间内重复实例化Random会导致生成的随机数重复,进一步加剧重复抽取的问题
  • 你用空格代替已抽取姓名的逻辑有缺陷,随机抽取的时候还是会抽到值为空格的下标,没有做过滤

修复方案

你可以把数组和随机数实例移到循环外,改用更适合动态增删的List<string>来存储姓名,抽中后直接移除对应元素,不需要手动处理空值,逻辑更简单:

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        bool isRunning = true;
        // 将姓名列表、随机实例移到循环外,只初始化一次
        List<string> names = new List<string> {"Mr. Albert", "Mr. Joshua", "Mr. Bernard", "Mr. Raphael"};
        Random rand = new Random();
        
        while (isRunning)
        {
            // 先判断是否已经抽完所有姓名,抽完直接退出循环
            if (names.Count == 0)
            {
                Console.WriteLine("所有姓名已抽取完毕,程序即将退出");
                isRunning = false;
                break;
            }
            
            Console.WriteLine("[1]抽取\n[2]退出\n");
            Console.Write("请输入操作编号:");
            int choice = Convert.ToInt32(Console.ReadLine());
            
            if (choice == 1)
            {
                int randIndex = rand.Next(names.Count);
                string selectedName = names[randIndex];
                Console.WriteLine("恭喜抽中:" + selectedName);
                // 直接从列表中移除已抽中的元素,后续不会再抽到
                names.RemoveAt(randIndex);
                Console.WriteLine("剩余待抽取姓名:");
                foreach (var name in names)
                {
                    Console.WriteLine(name);
                }
            }
            else if (choice == 2)
            {
                isRunning = false;
            }
            else
            {
                Console.WriteLine("输入无效,请输入1或2");
            }
        }
    }
}

优化说明

  • 用List<string>替代固定长度数组,天然支持动态移除元素,不需要自己处理空值过滤逻辑
  • 所有只需初始化一次的变量都放在循环外部,状态可以在多轮循环中保留
  • 增加了全部抽取完成后的自动退出逻辑,符合需求

内容的提问来源于stack exchange,提问作者Glen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:15:03