Возвращаемые значения в Java
Напишите метод с именем twice, который принимает int с именем n и отдаёт обратно удвоенное число. Заголовок начинается с int, не с void: static int twice(int n). Внутри фигурных скобок напишите return n * 2;. В main напечатайте результат вызова: System.out.println(twice(7));. На экране должна быть одна строка: 14. Сам twice println не вызывает. Он только отдаёт 14 назад. main печатает это число. Именно эта передача назад — тема страницы.
Верните число в main
На странице parameters методы greet и show печатали внутри тела. Вызов посылал значение внутрь, а метод писал на экран. Здесь метод по-прежнему принимает значение, но ещё и отдаёт значение наружу. Слово return отмечает это исходящее значение. main может сохранить его или напечатать.
Создайте небольшой файл программы с именем Box.java. public class в первой строке должен совпадать с именем файла: public class Box. Не оставляйте в этом файле старое имя класса Tip или Chime; компилятор ждёт, что имя класса и имя файла совпадут.
Вне main, но всё ещё внутри фигурных скобок класса, напишите:
static int twice(int n) {
return n * 2;
}
Заголовок больше не говорит void. Он говорит int, потому что возвращаемое значение — int. Между скобками int n по-прежнему параметр — та же идея, что на прошлой странице. В теле одна инструкция: return n * 2;. Она умножает n на 2 и отдаёт произведение тому, кто вызвал twice. На этой странице внутри twice нет System.out.println. Сохраните файл перед компиляцией.
Box.java с twice
Это полная маленькая программа. twice считает. main печатает.
public class Box {
public static void main(String[] args) {
System.out.println(twice(7));
}
static int twice(int n) {
return n * 2;
}
}
Из папки, где лежит Box.java, выполните javac Box.java. Когда скобки, фигурные скобки и точки с запятой совпадают, javac сам ничего не пишет. Затем выполните java Box — не java Box.java. Окончание .java у второй команды уберите. Те же две команды работают на Windows и на macOS; этой странице не нужна отдельная запись оболочки ни для одной системы. Программа должна напечатать одну строку и остановиться: 14. Она не должна ждать ввода с клавиатуры. Если терминал ждёт ввода, в файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте System.out.println(twice(7)); плюс метод twice выше. Неверная строка на экране не значит, что нужно заново ставить JDK.
Пройдите один запуск по порядку. Java начинает с main. Вызов twice(7) посылает 7 в n. Внутри twice строка return n * 2; считает 14 и отдаёт это 14 в main. Затем println пишет 14. twice сам на экран ничего не писал. Если сменить вызов на twice(3), экран должен показать 6. Тело метода то же; меняется только аргумент, и возвращаемое произведение меняется вместе с ним. Если на экране 7 вместо 14, вы напечатали n внутри twice или напечатали аргумент в main без вызова twice — удвоение держите на строке return и печатайте результат вызова.
Можно также сохранить возвращённое значение в имени внутри main перед печатью:
int result = twice(7);
System.out.println(result);
Это тоже показывает одну строку: 14. Сначала вызов завершается и заполняет result. Затем println пишет result. Обе формы — печать вызова напрямую или сохранение и потом печать — используют один и тот же return из twice.
Напечатайте значение, которое получил main
Меняйте только число в вызове, если нужна другая строка на экране. Строку return n * 2; не трогайте. После каждого изменения снова компилируйте и запускайте: javac Box.java, затем java Box. twice(0) должен напечатать 0. twice(10) должен напечатать 20. Каждый раз main печатает то, что отдал twice.
Если в заголовке twice ещё стоит void, а в теле есть return n * 2;, javac пишет ошибку — void значит, что ничего не возвращается, поэтому return со значением не подходит. Если заголовок говорит int, а в теле нет return, javac тоже пишет ошибку — метод int на этой начальной форме должен вернуть int на каждом пути. Если тело печатает и никогда не делает return, вы снова на идее страницы Tip; эта страница хочет, чтобы число оказалось в руках main.
void против типизированного return
Прочитайте две формы рядом. Метод void выполняет тело и заканчивается. Метод с типизированным return должен отдать значение через return. Когда тип возврата не void, main воспринимает вызов как это значение.
📊 тело void против return
| Форма | Что делает метод | Что часто делает main |
|---|---|---|
| void show(int n) | печатает внутри тела | вызывает show(9); и может больше ничего не печатать |
| int twice(int n) | return n * 2; | печатает или сохраняет twice(7) |
Частая путаница — поставить System.out.println(n * 2); внутри twice и оставить заголовок int без return. Тогда javac ругается, или вы меняете заголовок обратно на void и у main больше нет значения для печати из вызова. Другая путаница — написать return; без значения, пока заголовок говорит int. Держите return n * 2;, чтобы тип возвращаемого выражения совпадал с int. Запись System.out.println("twice"); в main печатает слово twice; метод не вызывается. Когда на экране нужно 14, держите println(twice(7)).
Оставшийся демо-вызов Tip greet, который внутри метода только печатает hi lena, может лежать в том же файле и путать экран. Очистите main до println, который использует twice, и оставьте один возвращающий метод. Не вкладывайте twice внутрь фигурных скобок main. Методы сидят внутри класса, рядом с main. Закройте фигурные скобки twice до конца класса.
До overloading
Вы можете написать static int twice(int n), вернуть вычисленное значение и напечатать его из main. Экран показывает число, которое получил main, а не строку, которую метод напечатал сам. void — неверный заголовок, когда нужно значение назад. Следующая страница — overloading, где несколько методов могут делить одно имя, если списки параметров различаются.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху