なぜブール値を返すこのif文ではありませんか?

ジェイコブ・ウォーレン:

私は、入力がその数と同じになるまで追加(番号は含まない)の要素を意味完璧な数がある場合に表示されますプログラムを作成しようとしています。私はそれは、戻り値以外の作業ました。私は、要因の合計が、しかし、それはそれを行うことはありません入力された数に等しい場合は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を返していないことを期待しています。実際には、メソッドのリターンが使用されなかったことを何でもして状態を返しません。

エリオットの新鮮:

あなたは結果を印刷していないので、それは「動作しません」。

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ようにし、ラムダフィルター

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=187452&siteId=1