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

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之间的整数!");
    }
}

额外优化建议

  1. 用StringBuilder优化字符串拼接:如果循环次数较多,反复修改TextBox.Text会频繁触发UI更新,用StringBuilder先拼接内容,最后再赋值给文本框效率更高:
// 记得顶部添加引用:using System.Text;
StringBuilder sb = new StringBuilder();
do
{
    sb.AppendLine($"{number * multiply++}");
} while (multiply <= 10);
txbTafel.Text = sb.ToString();
  1. 重置循环变量:每次点击按钮都重置multiply为1,避免上次循环的残留值影响本次计算结果,修正后的代码已包含这一点。

  2. 明确错误提示:把模糊的...提示改成具体信息,让用户清楚知道输入不符合要求的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:01:05