You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

C#新手求助:判断质数程序运行触发未处理的DivideByZeroException异常

解决你的C#质数判断程序错误

嘿,我来帮你搞定这个问题!你遇到的DivideByZeroException是因为循环里的变量i从0开始了——当i=0的时候,执行A % i就会触发除以零的异常,毕竟数学里可不能用0当除数呀。而且你的代码还有几个逻辑小问题,我一起帮你修正。

错误根源分析

  1. 除以零异常:你的for循环从i=0开始,第一次循环就会执行A % 0,直接抛出异常。
  2. 质数定义错误:质数的定义是大于1的自然数,且只能被1和自身整除,所以当A < 2的时候(比如0、1),它肯定不是质数,但你的代码却输出它是质数,这不符合定义。

修正后的代码

Console.Write("Enter the number: ");
// 新手可以后续补充输入验证,避免非数字输入报错
int A = Convert.ToInt32(Console.ReadLine());
bool isPrime = true;

// 先处理小于2的情况,直接判定不是质数
if (A < 2)
{
    isPrime = false;
}
else
{
    // 循环从2开始,1是所有数的因数,无需检查
    // 优化:循环到Math.Sqrt(A)即可,因为若A有大于平方根的因数,对应另一个因数必然小于平方根
    for (int i = 2; i <= Math.Sqrt(A); i++)
    {
        if (A % i == 0)
        {
            isPrime = false;
            break; // 找到因数就提前退出,提升效率
        }
    }
}

// 根据结果输出
if (isPrime)
{
    Console.WriteLine($"{A} is a prime number!!");
}
else
{
    Console.WriteLine($"{A} is not a prime number!!");
}
Console.ReadKey();

关键修正点说明

  • 循环起始值改为2:跳过0和1,既避免了除以零的问题,又符合质数判断逻辑(1不是质数的有效因数)。
  • 修正小于2的数的判断:严格遵循质数定义,把0、1这类数直接判定为非质数。
  • 优化循环条件到Math.Sqrt(A):减少循环次数,比如判断100时只需循环到10而非99,提升大数判断的效率。
  • 变量名更清晰:把flag改成isPrime,代码可读性更强,一眼就能明白变量的作用。

作为新手,你还可以尝试添加输入验证,比如用int.TryParse判断用户输入是否为有效整数,避免非数字输入导致的报错,这是C#程序里很实用的小技巧哦!

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

火山引擎 最新活动