C#中if-else与do-while循环结合异常问题求助
问题分析与代码修复
先看你代码里的几个核心问题:
- 赋值运算符误用:
if (number = 2)这里用了=(赋值)而不是==(等于判断),这会直接把2赋值给number,不管用户输入什么,都会进入第一个if分支执行循环,这是逻辑错误的根源。 - 重复冗余代码:两个do-while循环的逻辑完全一致,没必要写两次,合并后更易维护。
- 缺少输入合法性校验:直接用
int.Parse处理输入,如果用户输入非整数内容,程序会直接抛出异常,这就是你需要错误处理的场景,用int.TryParse比try-catch更简洁安全。 - 逻辑分支冗余:第一个判断
number == 2完全包含在number <= 12的范围内,没必要单独拆分,反而会让逻辑混乱。
修正后的代码
private void button1_Click(object sender, EventArgs e) { int number = 0; int multiply = 1; // 先清空结果框,避免重复追加内容 txbTafel.Text = string.Empty; // 用TryParse验证输入合法性,避免抛出异常 if (!int.TryParse(txbGetal.Text, out number)) { MessageBox.Show("请输入有效的整数!"); return; } // 合并逻辑分支,简化判断逻辑 if (number >= 1 && number <= 12) { do { txbTafel.Text += $"\r\n{number * multiply++}\r\n"; } while (multiply <= 10); } else { MessageBox.Show("请输入1到12之间的整数!"); } }
额外优化建议
- 用StringBuilder优化字符串拼接:如果循环次数较多,反复修改
TextBox.Text会频繁触发UI更新,用StringBuilder先拼接内容,最后再赋值给文本框效率更高:
// 记得顶部添加引用:using System.Text; StringBuilder sb = new StringBuilder(); do { sb.AppendLine($"{number * multiply++}"); } while (multiply <= 10); txbTafel.Text = sb.ToString();
重置循环变量:每次点击按钮都重置
multiply为1,避免上次循环的残留值影响本次计算结果,修正后的代码已包含这一点。明确错误提示:把模糊的
...提示改成具体信息,让用户清楚知道输入不符合要求的原因。
内容的提问来源于stack exchange,提问作者Stefan N
相关产品推荐
相关产品推荐

