【发布时间】:2016-02-16 14:48:08
【问题描述】:
我需要打印一个完美数的因数。这是我的主要课程的要点:
ArrayList<Integer> perfNums = new ArrayList<>();
Scanner in = new Scanner(System.in);
System.out.print("Enter the upperbound: ");
upperbound = in.nextInt();
for (int i = 1; i <= upperbound; i++) {
if (isPerfect(i)) { //boolean to check if number is a perfect number
perfNums.add(i);
}
}
System.out.println("Perfect numbers between 1 and " + upperbound + " are:");
for (int i = 0; i < perfNums.size(); i++) {
System.out.print(perfNums.get(i) + " = ");
printFactor((int)perfNums.get(i));
System.out.println();
}
这是 printFactor 类。
private static void printFactor(int number){
int factor = 1;
while(factor < number){
if (number%factor == 0) System.out.print(factor+ " + ");
//I don't know how to print the + sign otherwise.
factor++;
}
}
这是一个示例输出:
Enter the upperbound: 10000
Perfect numbers between 1 and 10000 are:
6 = 1 + 2 + 3 +
28 = 1 + 2 + 4 + 7 + 14 +
496 = 1 + 2 + 4 + 8 + 16 + 31 + 62 + 124 + 248 +
8128 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 127 + 254 + 508 + 1016 + 2032 + 4064 +
我已经掌握了它的主要要点,但我一直在努力解决输出问题。由于我的在线提交系统的限制,我的输出需要符合确切的规范。
我的问题是如何打印我的完美数的所有因数但删除末尾的 + 号?(例如)6 = 1 + 2 + 3
我不太确定从 while 循环中打印的许多方法。 for 循环会更好地实现我的目标吗?或者是否有其他方法可以打印数字的因数?
【问题讨论】:
-
for 循环可能无济于事,因为它只是另一种循环。您可以做的是将因素收集到一个列表中,然后打印该列表,即循环它并在每个元素之前打印一个 +,但列表中的第一个(或每个元素之后但最后一个)。
-
使用
List然后StringJoiner怎么样?或者更好的是,Java 8 流和collect()。 -
如果您想使用您的代码:使用 2 个打印语句并首先打印 + 如果您在之前的一次迭代中打印了一个因子(在方法中使用布尔值来跟踪它或检查当前因子不是 1,因为它始终是第一个)。
-
添加到@m0skit0 所说的内容,这可能是最好的方法,
StringJoiner只有在使用 java 8 时才可用 -
您可以在循环之前打印
1,在2开始factor,并在循环中的每个数字之前打印" + "。
标签: java loops while-loop numbers factors