为什么if语句不返回布尔值?

时间:2019-05-17 03:07:11

标签: java if-statement while-loop

我正在尝试制作一个程序,该程序将显示输入是否为理想数字,这意味着因素(不包括数字)加起来等于该数字。 我得到了它的工作,而不是返回值。 如果各因素之和等于输入的数字,我想返回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将具有sum =等于输入的数字时,这就是我得到true语句的时间,但是当这种情况发生时它不会返回true。实际上,它不返回任何内容,并指出未使用该方法返回。

1 个答案:

答案 0 :(得分:4)

它“不起作用”,因为您没有打印结果。

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

应该是

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

是“ true”。另外,

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;
}