Java求和循环终止问题求助:达3000时停止并输出终止计数器值
解决Java累加求和到指定值停止的问题
嘿,别担心,作为Java初学者遇到这种问题太正常啦!我来帮你分析一下问题所在,然后给出修正方案。
原代码的问题
你的思路是对的,但有一个关键的逻辑漏洞:你判断的是sum == 3000才停止循环,但连续整数的累加和可能永远不会刚好等于3000。我们可以算一下:
1到n的和公式是n*(n+1)/2,解方程n*(n+1)/2 = 3000,得到n≈76.96,也就是说:
- 加到76时,总和是
76*77/2 = 2926 - 加到77时,总和变成
2926+77=3003
可见总和直接从2926跳到了3003,完全跳过了3000,所以你的sum == 3000条件永远不会触发,循环会一直跑到999(因为原循环是i<1000),最后输出的是1到999的总和,根本不会提前停止。
另外原循环的i <1000可以改成i <=1000,这样才能包含1000这个数,不过这不是核心问题。
修正后的代码
只需要把判断条件改成sum >= 3000,就能在总和达到或超过3000时立刻停止循环,同时输出当时的i值:
public class JavaApplication2018 { public static void main(String[] args) { int sum = 0; // 改成i <=1000,确保能遍历到1000 for (int i = 1; i <= 1000; i++) { sum += i; // 简化写法,等价于sum = sum + i if (sum >= 3000) { System.out.println("循环终止时的计数器值:" + i); break; } } System.out.println("最终总和:" + sum); } }
运行结果
这段代码运行后会输出:
循环终止时的计数器值:77 最终总和:3003
这完全符合你的需求:当总和达到3000(这里是超过,因为刚好等于的情况不存在)时停止,输出最后一个被累加的i值77。
如果想要更严谨,也可以先判断加上当前i后是否会超过3000,再决定是否累加,写法如下:
public class JavaApplication2018 { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 1000; i++) { if (sum + i >= 3000) { sum += i; System.out.println("循环终止时的计数器值:" + i); break; } sum += i; } System.out.println("最终总和:" + sum); } }
这个写法和之前的结果是一样的,只是逻辑顺序不同,看你更喜欢哪种风格。
慢慢来,Java学习就是这样一步步踩坑、一步步解决问题过来的,继续加油哦!
内容的提问来源于stack exchange,提问作者BellaCarol
相关产品推荐
相关产品推荐

