Java程序输出真因子时末尾多余逗号的修复问题求助
Java友好数程序修复方案
问题分析
- 输出格式问题:
factorPairs2方法中,判断是否添加逗号的逻辑错误——用i != n / 2作为判断条件,但n/2不一定是当前数的真因子(比如25的n/2=12,而最后一个真因子是5),导致最后一个真因子后面会多余添加逗号。 - 逻辑错误:
sumOfProperDivisors方法的循环条件i < num / 2会漏掉num/2这个真因子(比如28的14),导致真因子和计算错误,影响友好数的判断结果。
修复方案(不使用List集合)
方案一:修正真因子输出格式
核心思路是用标记变量记录是否已输出第一个真因子,后续因子前先加逗号,从根源避免末尾多余逗号:
public static void factorPairs2(int n) { System.out.print("The proper divisors of "+n+" are: {"); boolean firstDivisorFound = false; for (int i = 1; i <= n / 2; i++) { if (n % i == 0) { if (firstDivisorFound) { // 非第一个因子,先输出逗号分隔 System.out.print(", "); } System.out.print(i); firstDivisorFound = true; } } System.out.print("}.\n"); }
方案二:修正真因子和计算逻辑
原方法漏掉了num/2这个可能的真因子,需将循环条件改为i <= num / 2:
public static int sumOfProperDivisors(int num) { int sum = 0; // 修复循环条件,包含num/2这个真因子 for (int i = 1; i <= num / 2; i++) { if (num % i == 0) { sum += i; } } return sum; }
测试验证
- 输入25时,真因子输出为
{1, 5},无多余逗号 - 输入28时,真因子输出为
{1, 2, 4, 7, 14},真因子和计算正确
内容的提问来源于stack exchange,提问作者Mitch
相关产品推荐
相关产品推荐

