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

使用Int.TryParse时输入非整数仍填充数组0值的解决方法咨询

问题描述

我正在跟随教程学习,尝试将代码中的Int.Parse替换为Int.TryParse。功能可正常运行,但当输入字符或字符串时,数组的对应槽位仍会被填充为0。我希望实现仅在输入为有效整数时才将其添加到数组,避免无效输入占用数组位置并填充0。

以下是我的代码:

Console.WriteLine("How many employee IDs would you like to register?");

string input = Console.ReadLine();

int length; 

if(int.TryParse(input, out length))
{
    int[] employeeIds = new int[length];

    for (int i = 0; i < length; i++)
    {
        Console.Write("Please enter the employee ID.");
        string input2 = Console.ReadLine();
        int id;
        if(int.TryParse(input2, out id))
        {
            employeeIds[i] = id;
        }
        else
        {
            Console.WriteLine("Invalid input, please enter a valid integer number.");
        }
    }
    for (int i = 0; i < employeeIds.Length; i++)
    {
        Console.WriteLine($"ID {i + 1}:  \t{employeeIds[i]}");
    }
}
else
{
    Console.WriteLine("Input is invalid, please input an integer number.");
}

解决方法

方案一:使用List<int>动态存储(推荐)

数组是固定长度的,一旦创建就无法改变大小,这是导致无效输入占用位置的核心原因。改用List<int>可以动态添加有效输入,完全避免无效输入占用槽位的问题:

Console.WriteLine("How many employee IDs would you like to register?");

string input = Console.ReadLine();

int targetCount; 

if(int.TryParse(input, out targetCount))
{
    List<int> employeeIds = new List<int>();

    while (employeeIds.Count < targetCount)
    {
        Console.Write("Please enter the employee ID: ");
        string input2 = Console.ReadLine();
        int id;
        if(int.TryParse(input2, out id))
        {
            employeeIds.Add(id);
        }
        else
        {
            Console.WriteLine("Invalid input, please enter a valid integer number.");
        }
    }

    // 如果需要转换为数组,可使用 employeeIds.ToArray()
    for (int i = 0; i < employeeIds.Count; i++)
    {
        Console.WriteLine($"ID {i + 1}:  \t{employeeIds[i]}");
    }
}
else
{
    Console.WriteLine("Input is invalid, please input an integer number.");
}

说明:

  • 用List<int>的Count属性判断是否已收集到足够的有效ID,只有输入有效时才调用Add方法添加元素
  • 循环会持续执行,直到收集到用户指定数量的有效ID为止
  • 如果后续需要数组类型,可通过employeeIds.ToArray()转换

方案二:调整数组循环逻辑(保持数组使用)

如果坚持使用数组,可以在输入无效时让循环索引i递减,这样无效输入不会占用数组的槽位:

Console.WriteLine("How many employee IDs would you like to register?");

string input = Console.ReadLine();

int length; 

if(int.TryParse(input, out length))
{
    int[] employeeIds = new int[length];

    for (int i = 0; i < length; i++)
    {
        Console.Write("Please enter the employee ID: ");
        string input2 = Console.ReadLine();
        int id;
        if(int.TryParse(input2, out id))
        {
            employeeIds[i] = id;
        }
        else
        {
            Console.WriteLine("Invalid input, please enter a valid integer number.");
            i--; // 输入无效时,索引回退,重新尝试当前位置的输入
        }
    }
    for (int i = 0; i < employeeIds.Length; i++)
    {
        Console.WriteLine($"ID {i + 1}:  \t{employeeIds[i]}");
    }
}
else
{
    Console.WriteLine("Input is invalid, please input an integer number.");
}

说明:

  • 当输入无效时,执行i--,让下一次循环回到当前索引位置,重新接收输入
  • 这样只有有效输入才会填充到数组的对应槽位,不会出现0占位的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:20:28