如何实现星期名称与数字的正确互转?修复数组索引匹配问题
解决星期名称与数字互转的问题
我来帮你搞定这个转换问题!你的核心需求很明确:输入"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,把0-based的索引转换成1-based的数字,同时增加了无效输入判断,避免输出奇怪的-1。
- 数字转星期:给输入的数字减1,把1-based的数字转换成0-based的数组索引,完美匹配你定义的数组顺序,还避免了越界问题。
- 增加
Trim()处理输入文本的前后空格,防止用户不小心输入空格导致的匹配失败。
内容的提问来源于stack exchange,提问作者wavers00
相关产品推荐
相关产品推荐

