Ошибка пропущенного оператора возврата после удаления оператора возврата - PullRequest
0 голосов
/ 22 января 2019

Я работаю над домашним заданием на Java. Я должен использовать операторы if, else if, else для вывода оператора.

Три возможности, которые могут быть сгенерированы:

  • Пример 1: пользовательский ввод 7, вывод «Вы живете менее чем в 10 милях от MCTC».

  • Пример 2: пользовательский ввод 11, вывод «вы живете более чем в 10 милях от MCTC».

  • Пример 3. пользовательский ввод 10, вывод «вы живете ровно в 10 милях от MCTC».

Вот 4 изображения , показывающие мою проблему.

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

Когда я удаляю строку: return null; // TODO delete this line and replace with your code., я получаю сообщение об ошибке при наведении курсора на 2-ю до последней фигурной скобки: missing return statement

Когда я запускаю программу, я размещаю изображение, показывающее ошибку.

public class Question_1_Miles_From_MCTC {

    public static void main(String[] args) {

        double miles = doubleInput("How many miles do you live from MCTC? ");

        String response = milesFromMCTC(miles);

        System.out.println(response);

    }

    public static String milesFromMCTC(double miles){

        // TODO Use if - else if - else statements to return the correct String

        // Return  "You live more than 10 miles from MCTC" if they live more than 10 miles away,
        // Return  "You live exactly 10 miles from MCTC" if they live exactly 10 miles away,
        // Return  "You live less than 10 miles from MCTC" if they live less than 10 miles away.
        if (miles > 10) {
            System.out.println("You live more than 10 miles from MCTC");
        } else if (miles == 10){
            System.out.println("You live exactly 10 miles from MCTC");
        } else {
            System.out.println("You live less than 10 miles from MCTC");
        }

        return null; // TODO delete this line and replace with your code.
    }
}

Ответы [ 4 ]

0 голосов
/ 22 января 2019

Давайте попробуем , чтобы объяснить это более подробно для тех из нас, кто только начинает ...

В Java и многих других строго типизированных языках методы (например, milesFromMCTC(double miles) из вашего Question_1_Miles_From_MCTC класса) должны иметь указанный тип возвращаемого значения, который для вашего метода равен String - эквивалент серии символы / текст в программировании на жаргоне. Это означает, что перед завершением вызова этого метода в нем должно быть возвращено String , чтобы другие программисты могли гарантировать, что они получат правильное значение и ожидаемый тип данных при использовании вашего метода. В вашем коде это показано следующим оператором: String response = milesFromMCTC(miles);, в котором вы ожидаете, что возвращаемое значение вашего метода будет String. Если этим методом ничего не возвращается, что будет хранить переменную response?

Подход, который вы выбрали, несмотря на то, что он, по-видимому, действителен для домашней работы, меняет направление, в котором вы, возможно, учили упражнение - вы используете System.out.println, чтобы напечатать результат вызова вашего метода, но в то же время любая строка должна быть возвращена, поэтому IntelliJ жалуется на отсутствующий оператор возврата. Учтите, что даже null приемлем для String в Java, так как это не примитивный тип данных в отличие от других языков.

С другой стороны, существует специальный тип возврата, называемый void, который позволит вам вызывать методы и делать вещи без необходимости что-либо возвращать, например, в следующем примере:

public class HelloWorldClass {
    public static void main (String[] args) {
        // Here our method with void return type is called, which prints Hello
        sayHello();
    }

    private static void sayHello() {
        System.out.println("Hello!");
    }
}

На самом деле, если вы посмотрите в своем коде, уже есть метод, который ничего не возвращает (и, следовательно, void тип возврата) - ваш main()!

Итак, теперь, когда мы знаем, что мы должны либо возвращать String, когда тип возвращаемого нами метода равен String, либо ничего не возвращать, если тип возвращаемого значения void, попробуйте подумать, как можно адаптировать свой код для исправления вашего проблема и распечатать правильный результат. Затем проверьте, правильно ли вы указали ниже:)

Решение, как его учил тьютор:

// This is Java code so it will not run in StackOverflow snippet
public class Question_1_Miles_From_MCTC {

    public static void main(String[] args) {

        double miles = doubleInput("How many miles do you live from MCTC? ");

        // get the correct answer as String (text) from your method and store it in response
        String response = milesFromMCTC(miles);

        // print the result here by passing response to System.out.println
        System.out.println(response);

    }

    public static String milesFromMCTC(double miles){

        // TODO Use if - else if - else statements to return the correct String

        // Return  "You live more than 10 miles from MCTC" if they live more than 10 miles away,
        // Return  "You live exactly 10 miles from MCTC" if they live exactly 10 miles away,
        // Return  "You live less than 10 miles from MCTC" if they live less than 10 miles away.
        if (miles > 10) {
            return "You live more than 10 miles from MCTC";
        } else if (miles == 10){
            return "You live exactly 10 miles from MCTC";
        } else {
            return "You live less than 10 miles from MCTC";
        }
    }
}

Решение в соответствии с вашим подходом, адаптированное для исправления отсутствующего оператора возврата:

// This is Java code so it will not run in StackOverflow snippet
public class Question_1_Miles_From_MCTC {

    public static void main(String[] args) {

        double miles = doubleInput("How many miles do you live from MCTC? ");

        // Now as our method is void we cannot store it in a variable, so we will let it print our answer
        milesFromMCTC(miles);

        // There are not applicable now
        // String response = milesFromMCTC(miles);
        // System.out.println(response);

    }

    // we have to change the return type here to void so that we don't have to return anything
    public static void milesFromMCTC(double miles){

        // TODO Use if - else if - else statements to return the correct String

        // Return  "You live more than 10 miles from MCTC" if they live more than 10 miles away,
        // Return  "You live exactly 10 miles from MCTC" if they live exactly 10 miles away,
        // Return  "You live less than 10 miles from MCTC" if they live less than 10 miles away.
        if (miles > 10) {
            System.out.println("You live more than 10 miles from MCTC");
        } else if (miles == 10){
            System.out.println("You live exactly 10 miles from MCTC");
        } else {
            System.out.println("You live less than 10 miles from MCTC");
        }
    }
}

В качестве последнего замечания, в реальном сценарии программирования вы бы предпочли использовать первое решение, поскольку оно позволяет вам делать с ответом все, что вы хотите, вместо того, чтобы принуждать его печатать на консоли, что в большинстве случаев предназначено только для для отладки.

Надеюсь, это помогло немного понять типы возвращаемых значений. Удачи с остальным домашним заданием!

0 голосов
/ 22 января 2019

Вам нужно либо вернуть строку, присвоив ее переменной, либо перечислить void вместо String в объявлении функции.

0 голосов
/ 22 января 2019

Вот как вы будете возвращать соответствующие строки без завершения метода:

public static String milesFromMCTC(double miles){

    if (miles > 10) {
        return "You live more than 10 miles from MCTC";
    } else if (miles == 10){
        return "You live exactly 10 miles from MCTC";
    } else {
        return "You live less than 10 miles from MCTC";
    }

}

и затем печатать возвращенную строку из вызывающей функции

0 голосов
/ 22 января 2019

Если вы удалите return null;', вы ничего не вернете. Поскольку вы объявили тип возврата в вашем методе как тип String, вам необходимо вернуть значение String или ноль. Поскольку это домашнее задание, этого должно быть достаточно, чтобы вы начали.

...