Давайте попробуем , чтобы объяснить это более подробно для тех из нас, кто только начинает ...
В 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");
}
}
}
В качестве последнего замечания, в реальном сценарии программирования вы бы предпочли использовать первое решение, поскольку оно позволяет вам делать с ответом все, что вы хотите, вместо того, чтобы принуждать его печатать на консоли, что в большинстве случаев предназначено только для для отладки.
Надеюсь, это помогло немного понять типы возвращаемых значений. Удачи с остальным домашним заданием!