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

C#固定长度数组无法通过Length判断空数据,No Data Yet提示逻辑失效

核心问题根因
  • 数组长度判断逻辑完全失效:你静态初始化的fName、cNumber都是指定了容量为10的数组,数组实例化完成后,Length属性会固定返回10,永远不可能等于0。之前写的组合判断fName.Length == 0 && cNumber[i] == 0,因为前半段永远为false,不管后半段取什么值,整个判断结果都始终为false,根本无法触发空数据的提示分支。
  • 循环输出的元素引用错误:遍历打印联系人时,代码没有取对应循环索引的数组元素,反而一直读取全局计数器i、k对应的固定位置值,哪怕已经存入了联系人,输出内容也始终是数组末尾的空值,和实际存储的内容完全错位。
  • 判断逻辑冗余错位:你已经定义了i、k两个计数器专门用来记录已录入的联系人位置,这两个计数器的初始值都是0,只要没有新增联系人,值就不会变化,完全可以直接用计数器判断空状态,根本不需要逐一遍历数组元素做判断。
修复方案
  • 空状态判断直接绑定计数器值:当i == 0时,代表没有存入任何联系人,直接输出No Data Yet!,后续添加return直接终止方法执行,避免无意义的循环。
  • 修正循环的遍历范围和元素引用:循环的遍历上限改为已存数据量i,每次读取对应索引j位置的fName[j]、cNumber[j]元素,不要固定引用计数器位置的值。
  • 移除冗余的计数器k:姓名和联系号码是一一绑定存储的,不需要用两个独立计数器分别记录位置,统一用i管理存储位置即可,减少同步不一致的出错概率;同时补充数组容量上限判断,避免录入超过10条联系人时触发数组越界异常。
关键修复后代码片段
public static void displayContact()
{
    if (i == 0) 
    {
        Console.WriteLine("No Data Yet!");
        return;
    }

    for (int j = 0; j < i; j++)
    {
        Console.WriteLine(numbers[j] + ". " + fName[j] + " - " + cNumber[j]);
    }
}

public static void createContact()
{
    // 容量边界判断
    if (i >= 10)
    {
        Console.WriteLine("Phonebook storage capacity is full, unable to add new contact.");
        return;
    }

    Console.Write("\nEnter your full name: ");
    fullName = Console.ReadLine();
    fName[i] = fullName;

    Console.Write("\nEnter your contact number: ");
    contactNumber = Convert.ToInt64(Console.ReadLine());
    cNumber[i] = contactNumber;

    // 同位置数据全部存入后再累加计数器
    i++;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 03:36:09