为什么这个if语句没有返回布尔值?

4

我正在尝试创建一个程序,可以显示输入是否为完美数,即除该数本身外的所有因子之和等于该数。 除了返回值以外,我的程序已经可以工作了。 如果因子之和等于输入的数字,则我想返回true,但它就是不起作用。 我尝试将if语句在代码中移动到各处,但无论如何都不行。

public class Main {

public static void main(String[] args) {
    isPerfectNumber(28);
}

public static boolean isPerfectNumber(int number) {
    if (number < 1) {
        return false;
    }
    int numberToTest = 1;
    int sumOfFactors = 0;

    while (numberToTest < number) {
        if (number % numberToTest == 0) {
            sumOfFactors += numberToTest;
        }
        numberToTest++;
    }

    if (sumOfFactors == number) {
        return true;
    }else{
        return false;
    }
}

我希望当代码看到sumOfFactors将具有与输入的数字相等的总和时,它将返回true语句。然而,当发生这种情况时,它不会返回任何内容,并声明方法返回未被使用。


请问您能否将整个函数粘贴到问题中? - Manoj Vadehra
而你是如何调用它的。 - shmosel
整个函数已经就位。 - Jacob Warren
1个回答

4
"不起作用"是因为您没有打印出结果。
public static void main(String[] args) {
    isPerfectNumber(28);
}

应该是

public static void main(String[] args) {
    System.out.println(isPerfectNumber(28));
}

这是“真实的”。另外,

if (sumOfFactors == number) {
    return true;
} else {
    return false;
}

写出来还有很长的路要走

return sumOfFactors == number;

如果您使用的是Java 8+,您的isPerfectNumber方法可以用一个IntStream和一个lambda过滤器写成一行代码,例如:

public static boolean isPerfectNumber(int number) {
    return number >= 1 && IntStream //
            .range(1, number) //
            .filter(i -> number % i == 0) //
            .sum() == number;
}

我简直不敢相信我错过了这个,很抱歉,我还在我的编程第一周,只是一个愚蠢的错误。非常感谢您的回复。 - Jacob Warren
1
用四行代码写成一行代码?;-) --- 另外,那些 // 是有原因的吗? - Andreas
@Andreas 我想他指的是Java中只需要一个分号,因为它是单个语句。 - penguin359
@penguin359 我知道,但是单个语句和单个不是一个东西。a = 1; b = 2;可以是一行代码,即使它有两个语句。而一个有30行的巨大流式方法链是一个语句,但几乎不是一行代码。 - Andreas
这是一条单行语句,我在此处将其分解以提高可读性;我使用注释来分隔该行的事实主要是我的IDE的产物。 - Elliott Frisch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接