Почему это не оператор if, возвращающий логическое значение? - PullRequest
4 голосов
/ 17 мая 2019

Я пытаюсь создать программу, которая будет показывать, является ли ввод идеальным числом, означающим, что факторы (не включая число) складываются так, чтобы они совпадали с этим числом. Я получил это работает, кроме возвращаемого значения. Я хочу вернуть значение 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, однако, когда это происходит, оно не возвращает true. Фактически, он ничего не возвращает и утверждает, что возвращаемые методы не использовались.

1 Ответ

4 голосов
/ 17 мая 2019

Это "не работает", потому что вы не печатаете результат.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...