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

如何实现星期名称与数字的正确互转?修复数组索引匹配问题

解决星期名称与数字互转的问题

我来帮你搞定这个转换问题!你的核心需求很明确:输入"Monday"返回数字1,输入数字1返回"Monday",其实只要针对数组索引做个简单偏移就能解决,完全不用把问题复杂化。

当前代码的核心问题

先拆解下你现有代码里的两处错误:

  • 星期转数字的逻辑:Array.IndexOf返回的是数组索引(0对应Monday),但你直接把索引输出了,这就导致输入Monday会得到0,不符合需求;而且没处理用户输入无效星期名称的情况(比如输错单词时,IndexOf会返回-1)。
  • 数字转星期的逻辑:你用了dayNumber + 1,这会让输入1时取数组索引2的"Wednesday",输入7时直接触发数组越界报错——正确的偏移应该是减1,因为数字1对应数组索引0。

修正后的完整代码

string[] days = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" };

public Form1() 
{ 
    InitializeComponent(); 
}

private void BtnGetNum_Click(object sender, EventArgs e) 
{
    string dayName = txtDayName.Text.Trim(); // 去除前后空格,避免误判
    int dayIndex = Array.IndexOf(days, dayName);
    
    // 处理无效输入
    if (dayIndex == -1)
    {
        MessageBox.Show("请输入有效的星期名称(例如:Monday)");
        lblNumOut.Text = string.Empty;
        return;
    }
    
    int dayNumber = dayIndex + 1; // 索引0转成数字1
    lblNumOut.Text = dayNumber.ToString();
}

private void BtnGetDay_Click(object sender, EventArgs e) 
{
    int dayNumber;
    if (!int.TryParse(txtDayNum.Text.Trim(), out dayNumber) || dayNumber < 1 || dayNumber > 7) 
    {
        MessageBox.Show("Must be a valid number from 1 to 7.");
        lblNameOut.Text = string.Empty;
        return;
    }
    
    int dayIndex = dayNumber - 1; // 数字1转成索引0
    lblNameOut.Text = days[dayIndex];
}

关键调整说明

  1. 星期转数字:给数组索引加1,把0-based的索引转换成1-based的数字,同时增加了无效输入判断,避免输出奇怪的-1。
  2. 数字转星期:给输入的数字减1,把1-based的数字转换成0-based的数组索引,完美匹配你定义的数组顺序,还避免了越界问题。
  3. 增加Trim()处理输入文本的前后空格,防止用户不小心输入空格导致的匹配失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:34:06