我的真因数的输出不正确,它应该是 25 的真因数是:{1, 5, }。 28 的真因数是:{1, 2, 4, 7, 14}

问题描述 投票:0回答:1
import java.util.Scanner;
public class GreatestCF {
    public static void main(String []args){
        Scanner sc = new Scanner(System.in);
        checkAmicableNumbers(sc);
    }
    // 9
    public static void checkAmicableNumbers(Scanner sc){
        System.out.println("Enter the first number:");
        int num1 = sc.nextInt();
        System.out.println("Enter the second number:");
        int num2 = sc.nextInt();
        factorPairs2(num1);
        factorPairs2(num2);

        if (areAmicable(num1 ,num2)){
            System.out.println("The numbers "+num1+ "and "+num2+" are amicable numbers!");
        }else{
            System.out.println("The numbers "+num1+ " and "+num2+" are not amicable numbers!");
        }
    }
    public static boolean areAmicable(int num1, int num2){
        return (sumOfProperDivisors(num1)==num2 && sumOfProperDivisors(num2)==num1);
    }
    public static int sumOfProperDivisors(int num){
        int sum = 0;
        for (int i=1; i<num/2;i++){
            if (num % i==0){
                sum +=i;
            }
        }
        return sum;
    }


public static void factorPairs2(int n){
    
    System.out.print("The proper divisors of "+n+" are: {");
    for (int i =1; i<= n/2; i++){
        if (n % i==0 ){
            System.out.print(i);
            if (i != n/2){
                System.out.print(", ");
            }
            
        }
    }
    System.out.print("}.\n");
}

}

我对正确除数的输出是在右花括号之前添加一个额外的逗号,并且我无法弄清楚如何修复它。我无法在代码中使用列表,因为它尚未在课堂上讨论过。

java
1个回答
0
投票

使用

sep
字符串。最初将其设置为
""
并在数字之前打印它。然后,如果找到除数,请将其更改为 ", "
。在后续除数(如果有)上,它将在前一个数字“之后”打印逗号。

public static void factorPairs2(int n) { String sep = ""; System.out.print("The proper divisors of "+n+" are: {"); for (int i = 1; i <= n / 2; i++) { if (n % i == 0) { System.out.print(sep); System.out.print(i); sep = ", "; } } System.out.println("}."); }
    
© www.soinside.com 2019 - 2024. All rights reserved.