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

如何避免用户输入数组中已存在的数字?现有代码执行异常

如何避免输入重复数字 & 修正你的代码问题

嘿,我来帮你搞定这个重复输入的问题!咱们先拆解你的疑问,再重点修复代码里的bug。

为什么你的代码首次输入就提示重复?

你当前的判断逻辑有明显问题:当第一次输入数字时,Array.IndexOf(number, number[i])返回的就是当前索引i(这是数组里第一个出现该数字的位置),然后你判断number[i] == number[getindex]——这相当于拿当前数字和它自己比,当然永远成立,所以第一次输入就会触发重复提示。另外,int数组默认初始化的元素都是0,如果输入的数字是0,还会误判和后面未赋值的0重复。

正确的实现方式

要避免输入已存在的数字,核心思路是:每次输入后,只检查已经存入数组的元素(也就是当前索引之前的元素),如果重复就要求用户重新输入,直到输入符合要求为止。这里给你修正后的代码,还加上了输入验证(防止用户输入非数字导致程序崩溃):

int[] number = new int[5]; 
for (int i = 0; i < number.Length; i++) 
{
    int inputNum;
    bool isDuplicate;
    do
    {
        Console.Write("Write a number : ");
        // 先确保输入的是有效整数
        while (!int.TryParse(Console.ReadLine(), out inputNum))
        {
            Console.WriteLine("Please enter a valid integer!");
            Console.Write("Write a number : ");
        }
        // 只检查数组中已经赋值过的部分(从索引0到i-1)
        isDuplicate = Array.IndexOf(number, inputNum, 0, i) != -1;
        if (isDuplicate)
        {
            Console.WriteLine("This number already exists, please try another one.");
        }
    } while (isDuplicate); // 重复输入直到拿到不重复的数字
    number[i] = inputNum;
}

代码关键说明:

  • do-while循环:确保用户必须输入不重复的数字才会退出循环,把值存入数组
  • Array.IndexOf(number, inputNum, 0, i):第四个参数i指定了搜索长度,意思是从索引0开始,只搜索前i个元素(已经填过值的部分),返回-1则说明没有重复
  • int.TryParse:避免用户输入非数字导致程序崩溃,让代码更健壮

通用思路总结

不管用数组还是其他集合(比如List<int>),避免重复输入的步骤都差不多:

  • 接收用户输入,并验证输入的有效性(比如是不是数字)
  • 检查已存储的元素中是否包含当前输入的值
  • 如果重复,提示用户重新输入;如果不重复,将值加入集合
  • 用循环重复这个流程,直到输入符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:08:34