Java嵌套循环中如何让内层for循环每次外层迭代仅执行一次
问题核心修正点
你的原代码存在3个明显问题导致不符合需求:
- 内层循环增量写法错误:
k =+ 2是直接给k赋值为2,不是递增2,会触发死循环 - 运算优先级错误:
1/k*Math.pow(3, n)的执行顺序是(1/k) * 3^n,和你需要的1/(k * 3^n)完全不符 - 内层循环每次外层迭代时从k=1遍历到k<=i,执行多次,不符合单次执行的要求
实现代码
以下实现保留了内层for循环结构,且保证每次外层迭代时内层仅执行一次,输出你需要的序列:
// 调用示例 calculatePiInnitial(4); public static double calculatePiInnitial(int i){ double sum = 0; // k初始值为1,每次外层迭代后递增2,保持奇数 int k = 1; for (int n=0; n<=i; n++){ // 内层循环控制为仅执行1次 for(int runOnce = 0; runOnce < 1; runOnce++) { double denominator = k * Math.pow(3, n); if (n % 2 == 0) { sum += 1 / denominator; } else { sum -= 1 / denominator; } k += 2; } } // 若你需要的是最终π的近似值,可解开下一行注释(对应马青公式变种) // sum *= Math.sqrt(12); return sum; }
修改说明
- 内层循环的条件设置为
runOnce < 1,天然保证每次外层迭代时内层仅执行1次,不需要额外break逻辑 - 修正了分母的运算顺序,和你需要的序列项计算逻辑一致
- k的递增放到内层循环末尾,每次执行完加2,保持奇数序列,和项的对应关系匹配
- 当i=3时的输出就是你给出的
1 - 1/9 + 1/135 - 1/184…前4项结果
内容的提问来源于stack exchange,提问作者NSD
相关产品推荐
相关产品推荐

