Возврат значения в Java - PullRequest
       12

Возврат значения в Java

0 голосов
/ 11 апреля 2011

Как мне написать метод, который возвращает значение примитивного типа данных, когда внутри метода есть оператор if, который возвращает другой тип данных в зависимости от результата?

int minimum = 5;
int students = 4;
int studentGrades = 100;

public double getAverage(){
    if(students >= minimum){
        return studentGrades / students;
    }
    else {
        System.out.println(null, "Sorry, you don't have enough students.");
        return false;
    }
}

Ответы [ 6 ]

4 голосов
/ 11 апреля 2011

Вы не можете действительно вернуть два разных примитивных типа из одного и того же метода. С ссылочными типами вы можете вернуть Object, это не очень хорошая идея.

Ваш return false выглядит как состояние ошибки, поэтому вы можете подумать о создании исключения здесь:

public double getAverage(){
    if(students >= minimum){
        return studentGrades / students;
    }
    else {
       throw new IllegalStateException("not enough students");
    }
}
2 голосов
/ 11 апреля 2011

В приведенном вами примере вы должны сгенерировать исключение - состояние объекта недопустимо для вызова метода, в основном. Вы можете использовать IllegalStateException для этого или выбрать другой тип исключения. (Это исключение распространяется на RuntimeException, поэтому оно не является проверено исключение. Это может или не может соответствовать вашему реальному варианту использования.)

(Кроме того, деление в вашем примере кода тоже не будет выполнять то, что вы хотите - вы должны привести один из операндов к double, если хотите, чтобы он выполнял деление с плавающей запятой вместо целочисленного деления.)

1 голос
/ 11 апреля 2011

public Object getAverage ()

, но тогда вы должны проверить класс возврата

0 голосов
/ 11 апреля 2011

Java-метод может иметь только один тип возвращаемого значения. Таким образом, вы должны попробовать другой подход в этой ситуации. Как уже отмечалось выше, вы можете выбросить исключение. Или вы можете использовать обнуляемый тип данных и возвращать ноль, когда это специальное условие истинно. Но это некрасиво и не рекомендуется.

0 голосов
/ 11 апреля 2011

Я не эксперт по Java, но я думаю, что хорошей практикой здесь является исключение, если у вас меньше необходимого количества студентов.Если вы должны вернуть 2 совершенно разных значения, я предлагаю вам инкапсулировать их в свой собственный класс.

0 голосов
/ 11 апреля 2011

Вы можете в качестве примера вернуть составной объект, который содержит оценку и флаг успеха. Или в приведенной выше версии вы можете вернуть Double.NaN, чтобы указать сбой. Или, как другие предложили бросить исключение в случае неудачи.

...