Java 为什么不是';这个if语句返回布尔值吗?

Java 为什么不是';这个if语句返回布尔值吗?,java,if-statement,while-loop,Java,If Statement,While Loop,我试图制作一个程序,显示输入是否是一个完美的数字,这意味着因子(不包括数字)加起来与该数字相同。 除了返回值,我让它工作。 如果因子之和等于输入的数字,我想返回true,但是它不会这样做 我试着在代码中移动if语句,但它在任何地方都不起作用 public class Main { public static void main(String[] args) { isPerfectNumber(28); } public static boolean isPerfectNumber(i

我试图制作一个程序,显示输入是否是一个完美的数字,这意味着因子(不包括数字)加起来与该数字相同。 除了返回值,我让它工作。 如果因子之和等于输入的数字,我想返回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;
    }
}
公共类主{
公共静态void main(字符串[]args){
isPerfectNumber(28);
}
公共静态布尔isPerfectNumber(整数){
如果(数字<1){
返回false;
}
int numberToTest=1;
int-sumOfFactors=0;
while(数字测试<数字){
如果(编号%numberToTest==0){
Sumoffacts+=数字测试;
}
numberToTest++;
}
if(sumOfFactors==数量){
返回true;
}否则{
返回false;
}
}
}

我希望当代码看到sumOfFactors将sum=与输入的数字相加时,我得到true语句,但是当这种情况发生时,它不会返回​ 对。事实上,它不返回任何内容,并声明该方法返回的内容未被使用。

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

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

public static void main(String[] args) {
    System.out.println(isPerfectNumber(28));
}
这是“真实的”。而且

这是一段很长的路要写

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

你能把整个函数粘贴到问题中吗?以及你是如何调用它的。整个函数都已经准备好了。我不敢相信我错过了这个。很抱歉,我还在第一个星期里,编码只是一个愚蠢的错误。非常感谢您的回复。以一行四行代码的形式编写?;-)还有,那些
/
是有原因的吗?@Andreas我想他指的是Java中的一条语句,只需要一个分号。@penguin359我知道,但单语句和单行不是一回事<代码>a=1;b=2可以是一行,即使它是两条语句。一个巨大的30行流方法链是一个单语句,但很难是一行语句;事实上,我用评论来打破界限在很大程度上是一个错误。
public static boolean isPerfectNumber(int number) {
    return number >= 1 && IntStream //
            .range(1, number) //
            .filter(i -> number % i == 0) //
            .sum() == number;
}