我需要打印完美數字的因子。這是我的主類的要點:從循環打印
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循環可能不會太大幫助,因爲它只是另一種循環的緣故。你可以做的是將這些因素收集到一個列表中,然後打印該列表,即遍歷它並在每個元素之前打印一個+,而不是列表中的第一個(或每個元素之後)。 – Thomas
那麼如何使用'List'然後['StringJoiner'](http://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html)?或者甚至更好,Java 8流和'collect()'。 – m0skit0
如果你想使用你的代碼:使用2個打印語句並打印+,如果你在之前的一個迭代中打印了一個因子(在方法中使用布爾值來跟蹤它或檢查當前因子不是1這總是第一個)。 – Thomas