Java通过阶乘for循环近似计算自然常数e输出异常排查
代码问题排查及修复方案
核心错误原因
- 错误1:整数除法规则导致后续累加项恒为0
Java中两个整数类型做除法运算时,结果会默认保留整数部分直接截断小数。你代码中1 / e_fact的1是int字面量,e_fact是long类型,二者都是整数,当e_fact >= 2时,运算结果恒为0,所以除了第一次累加有效外,后续累加都相当于加0,输出始终为2。 - 错误2:阶乘变量未每次迭代重置,导致阶乘计算结果错误
你在外层循环外初始化了e_fact = 1,但每次内层循环计算新的阶乘前没有将e_fact重置为1,后续迭代的阶乘结果会是错误的累积值,就算解决了整数除法问题,结果也会偏离预期。 - 优化点:不需要内层循环计算阶乘,每次外层迭代可以直接复用上次的阶乘结果,减少冗余计算。
修复后参考代码
import java.util.Scanner; public class CalculateE { public static void main(String[] args) { Scanner Case3Scanner = new Scanner(System.in); System.out.println("Nivel de exactitud? (iteraciones)?"); int e_stop = Case3Scanner.nextInt(); System.out.println("--------------"); double e_total = 1; // 最终输出的e近似结果 long e_fact = 1; // 存储当前迭代对应的阶乘结果 for (int e = 1; e <= e_stop; e++) { e_fact *= e; // 直接复用上次阶乘结果计算当前阶乘 e_total += 1.0 / e_fact; // 用1.0触发浮点数除法,保留小数 System.out.println(e_total); } Case3Scanner.close(); } }
内容的提问来源于stack exchange,提问作者lupinx2
相关产品推荐
相关产品推荐

