查找指定数值以下所有2的幂并计算其总和的Java实现问题
解决Java输出2的幂时的末尾加号和总和计算问题
嘿,作为Java新手遇到这种小问题太正常了,我来帮你一步步搞定!
先搞定总和计算错误的问题
你现在得到-2显然是累加逻辑出了问题。正确的思路很简单:初始化一个总和变量sum为0,每找到一个符合条件的2的幂,就把它加到sum里。比如n=50时,我们要累加2、4、8、16、32,总和自然就是62。
再去掉末尾多余的加号
你尝试用StringBuilder删最后两个字符没成功,大概率是因为拼接时的字符数没算对(比如" + "其实是三个字符),而且这种“事后补救”的方式也不够优雅。推荐两种更可靠的方法:
方法1:用集合收集元素再拼接
先把所有2的幂转换成字符串存到集合里,再用String.join(" + ", 集合)自动完成分隔,完全不会出现末尾的加号:
import java.util.Scanner; import java.util.ArrayList; import java.util.List; public class PowerOfTwoDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入n的值:"); int n = scanner.nextInt(); List<String> powerList = new ArrayList<>(); int sum = 0; int current = 2; // 第一个2的幂是2^1 while (current < n) { powerList.add(String.valueOf(current)); sum += current; current *= 2; // 计算下一个2的幂 } // 用" + "连接所有元素 String output = String.join(" + ", powerList); System.out.println(output + " = " + sum); } }
方法2:用StringBuilder时判断是否为第一个元素
在拼接前先判断是不是第一个数,第一个数直接加,后面的数先加" + "再加数字,从根源避免末尾加号:
import java.util.Scanner; public class PowerOfTwoDemo { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入n的值:"); int n = scanner.nextInt(); StringBuilder sb = new StringBuilder(); int sum = 0; int current = 2; boolean isFirst = true; while (current < n) { if (!isFirst) { sb.append(" + "); } sb.append(current); sum += current; current *= 2; isFirst = false; } System.out.println(sb.toString() + " = " + sum); } }
运行这两段代码,当n=50时,都会输出2 + 4 + 8 + 16 + 32 = 62,完美解决你的两个问题!
内容的提问来源于stack exchange,提问作者Bianca
相关产品推荐
相关产品推荐

