从循环打印

Win*_*inz -1 java loops numbers while-loop factors

我需要打印一个完美数字的因子.这是我主要课程的要点:

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();
}
Run Code Online (Sandbox Code Playgroud)

这是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++;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个示例输出:

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 + 
Run Code Online (Sandbox Code Playgroud)

我有它的主要要点,但我一直在努力解决输出问题.由于我的在线提交系统的限制,我的输出需要符合确切的规格.

我的问题是如何打印完整数字的所有因素,但最后删除+号?(例如)6 = 1 + 2 + 3

我不太确定从while循环中打印的许多方法.for循环会更好地实现我的目标吗?或者是否有其他方法来打印数字因子?

khe*_*ood 6

解决这个问题的最小变化可能是这样的:

private static void printFactor(int number) 
    System.out.print(1);
    int factor = 2;
    while (factor<number) {
        if (number%factor == 0) System.out.print(" + " + factor);
        factor++;
    }
}
Run Code Online (Sandbox Code Playgroud)

1始终是一个因素,因此您可以在循环之前打印,然后预先添加+到每个后续因子.