编写计算1+2+…+n的Java程序结果错误,请求技术排查
问题分析与修复方案
嘿,我帮你找出这段代码里的问题啦!你的核心问题是把累加器和循环计数器混在一起用了,导致逻辑完全偏离了“1到n求和”的需求,咱们一步步拆解:
原代码的核心错误
先看你这段循环逻辑:
while (addition <= n){ addition += addition; addition ++; }
- 你用
addition同时承担了两个角色:累加总和的变量、从1走到n的计数器,这就乱套了。 - 第一次循环:
addition初始是0,addition += addition会让它变成0(0+0),然后addition++变成1; - 第二次循环:
addition += addition变成1+1=2,再加1变成3; - 后续循环的计算逻辑完全和“1到n累加”无关,最后得到的结果自然是错的。
修复方案:两种实现方式
方式1:用循环累加(清晰直观)
咱们把累加器和计数器分开,一个变量存总和,一个变量从1遍历到n:
import java.util.Scanner; public class LukusarjanSumma { public static void main(String[] args) { Scanner reader = new Scanner(System.in); int sum = 0; // 专门存累加的总和 System.out.println("Where to?"); int n = Integer.valueOf(reader.nextLine()); int i = 1; // 专门当计数器,从1走到n while (i <= n){ sum += i; // 把当前计数器的值加到总和里 i++; // 计数器自增 } System.out.println("Total is " + sum); } }
如果觉得while循环有点啰嗦,换成for循环会更简洁(逻辑完全一致):
// 把while循环替换成这段for循环即可 for (int i = 1; i <= n; i++) { sum += i; }
方式2:用数学公式(更高效)
1到n的求和有现成的数学公式:总和 = n*(n+1)/2,不需要循环,直接计算就行,效率更高:
import java.util.Scanner; public class LukusarjanSumma { public static void main(String[] args) { Scanner reader = new Scanner(System.in); System.out.println("Where to?"); int n = Integer.valueOf(reader.nextLine()); int sum = n * (n + 1) / 2; // 直接用公式计算 System.out.println("Total is " + sum); } }
验证一下
比如输入n=5,两种方式都会得到1+2+3+4+5=15,你可以试试哦!
内容的提问来源于stack exchange,提问作者pakkis26
相关产品推荐
相关产品推荐

