Java输出1111-9999数值时触发ArithmeticException: / by zero原因
程序算术异常根因与修复
异常触发本质
Java的整数除法、取模运算不允许右侧操作数为0,只要运算过程中出现除数为0的情况,就会直接抛出ArithmeticException: / by zero,不存在自动容错机制。
代码存在的核心问题
- 零值无防护:循环遍历1111-9999的整数时,拆分出的个、十、百、千位数值完全可能为0(例如1200的个位为0、1024的百位为0)。当前代码直接拿这些数位值作为取模运算的右操作数,一旦碰到值为0的数位,立刻触发除以零报错。
- 逻辑方向错位:原需求是筛选区间内可被输入整数n整除的数,核心判断应该是「当前遍历数i对n取模结果为0」,但现有代码的判断逻辑是「输入的n对四位数的每一位取模结果为0」,完全偏离最初的程序目标。
对应修复方案
- 对齐需求逻辑:将if判断条件替换为
i % n == 0,确保判断的是数i能否被输入值n整除。 - 增加零值拦截:如果需要保留“四位数所有数位无0、且数位可整除n”的拓展规则,在取模判断前先检查所有拆分出的数位值是否为0,只要任意数位为0直接跳过当前数,不执行后续取模运算。
- 前置输入校验:读取到输入的n值后先判断是否为0,直接给出非法输入提示,避免进入循环后触发运算异常。
内容的提问来源于stack exchange,提问作者KristinaMM
相关产品推荐
相关产品推荐

