Java: Возврат значений
Методы, которые мы определяли в предыдущих уроках, заканчивали свою работу тем, что печатали на экран какие-то данные:
public class App < public static void greeting() < System.out.println("Winter is coming"); >>
Пользы от таких методов не очень много, ведь результатом их работы невозможно воспользоваться внутри программы.
Рассмотрим это на примере. Возьмем задачу обработки электронной почты. Когда пользователь регистрируется на каком-то сайте, то он может ввести почту любым способом:
- Добавить случайно пробелы в начале или в конце _support@hexlet.io__
- Использовать буквы в разном регистре SUPPORT@hexlet.io
Если мы сохраним адрес в таком виде в базу данных, то пользователь не сможет войти на сайт, если будет вбивать адрес без пробелов и в другом регистре.
Чтобы этого не произошло, адрес нужно подготовить к записи в базу — привести его к нижнему регистру и обрезать пробелы по краям строки. Вся задача решается в пару строчек:
class App < public static void main(String[] args) < // Получаем адрес из формы var email = " SuppORT@hexlet.IO"; // Обрезаем пробельные символы var trimmedEmail = email.trim(); // Приводим к нижнему регистру var preparedEmail = trimmedEmail.toLowerCase(); System.out.println(preparedEmail); // =>support@hexlet.io // Записываем в базу данных > >
Этот код стал возможен только благодаря возврату значения. Методы trim() и toLowerCase() ничего не печатают на экран. Они возвращают результат своей работы, и поэтому мы можем записать его в переменные. Если бы они вместо этого печатали на экран, мы бы не могли присвоить результат их работы переменной. Как мы не можем сделать с определенным выше методом greeting() :
// Java будет ругаться, что `greeting()` ничего не возвращает // Код не заработает var message = App.greeting();
Изменим метод greeting() таким образом, чтобы он начал возвращать данные, а не печатать их. Для этого нам понадобится выполнить две правки:
- Описать тип возвращаемых данных — здесь это строка String
- Выполнить возврат вместо печати на экран
Посмотрим на измененный код:
class App < public static String greeting() < return "Winter is coming!"; >>
Вместо void теперь написано String , потому что у метода есть возврат. Так мы указали Java, что результатом работы метода будет строка.
Еще обратите внимание на return – это особая инструкция. Она берет выражение справа и отдает его наружу тому коду, который вызвал метод. Как только Java натыкается на return , выполнение метода на этом завершается:
// Теперь этот код работает var message = App.greeting(); // Мы можем выполнить какие-то действия над результатом System.out.println(message.toUpperCase()); // => WINTER IS COMING!
Любой код после return не выполняется:
class App < public static String greeting() < return "Winter is coming!"; // Любой код ниже не выполнится никогда // Недостижимый код в Java даже не скомпилируется System.out.println("Я никогда не выполнюсь"); >>
Даже если метод возвращает данные, это не ограничивает его в том, что он печатает. Кроме возврата данных, мы можем и печатать их:
class App < public static String greeting() < System.out.println("Я появлюсь в консоли"); return "Winter is coming!"; >> // Где-то в другом методе программа // и напечатает текст на экран, и вернет значение var value = App.greeting();
Возвращать можно не только конкретное значение. Так как return работает с выражениями, то справа от него может появиться почти что угодно. Здесь нужно руководствоваться принципами читаемости кода:
class App < public static String greeting() < var message = "Winter is coming!"; return message; >>
Здесь мы не возвращаем переменную — возвращается всегда значение, которое находится в этой переменной. Ниже пример с вычислениями:
class App < public static long doubleFive() < // или return 5 + 5; var result = 5 + 5; return result; >>
В этом примере в определении метода использовался long , так как возвращается целое число.
Чтобы проверить знания из этого урока, попробуйте ответить на вопрос. Как думаете, что выведет этот код?
// Определение class App < public static int run() < return 5; return 10; >> // Использование App.run(); // => ?
Задание
Реализуйте статический метод sayHurrayThreeTimes() , которая возвращает строку ‘hurray! hurray! hurray!’.
var hurray = App.sayHurrayThreeTimes(); System.out.println(hurray); // => hurray! hurray! hurray!
Упражнение не проходит проверку — что делать?
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
- Обязательно приложите вывод тестов, без него практически невозможно понять что не так, даже если вы покажете свой код. Программисты плохо исполняют код в голове, но по полученной ошибке почти всегда понятно, куда смотреть.
В моей среде код работает, а здесь нет
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Мой код отличается от решения учителя
Это нормально , в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Прочитал урок — ничего не понятно
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Вернуть два числа из метода
Подскажите, как из метода filling вернуть число в randomize? Точнее сложность в том, что не пойму как вернуть return number, если возвращать нужно для двух игроков. Метода main нет, потому что вызывать буду в GuessNumberTest, пока пытаюсь сделать саму логику игры.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
import java.util.Scanner; public class GuessNumber { // Генерация случайно числа компьютером public int randomize() { int minRnd = 0; // начальное значение диапазона int maxRnd = 100; // конечное значение диапазона int random = minRnd+(int)(Math.random()*maxRnd); do { if (number > random) { System.out.println("The player entered the number more "); } else { System.out.println("The player entered a number less "); } } while (number != random); } // Ввод чисел public filling() { Player numberPlayerOne = new Player(); Player numberPlayerTwo = new Player(); Scanner sc = new Scanner(System.in); System.out.println("The first player enters the number "); int numberPlayerOne = sc.nextInt(); playerOne.setNumber(numberPlayerOne); System.out.println("The second player enters the number "); int numberPlayerTwo = sc.nextInt(); playerTwo.setNumber(numberPlayerTwo); } }
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Вернуть из метода два значения
Подскажите, как вернуть из метода переменную, которой присвоено значение в данном методе: .
Как вернуть два значения из метода?
Как вернуть два значения из метода? При таком коде выдаёт предупреждение cs0162. public static.
Сравнить два целых числа и вернуть результат сравнения
Написать функцию, которая сравнивает два целых числа и возвращает результат сравнения в виде одного.
![]()
3638 / 2970 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
кэп говорит, что надо сделать метод который возвращает одно число и вызвать его два раза
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
Или возвращать массив, список и т.д.
public ListInteger> filling()
3540 / 2144 / 566
Регистрация: 02.09.2015
Сообщений: 5,435

Сообщение было отмечено JackVorobey89 как решение
Решение
JackVorobey89, 1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
public class GuessNumber { private int numberPlayerOne; private int numberPlayerTwo; public int randomize() { System.out.println(numberPlayerOne); System.out.println(numberPlayerTwo); return 0; } public void filling() { numberPlayerOne = sc.nextInt(); numberPlayerTwo = sc.nextInt(); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
public class GuessNumber { public int randomize() { final Pair pair = filling(); System.out.println(pair.numberPlayerOne); System.out.println(pair.numberPlayerTwo); return 0; } public Pair filling() { final int numberPlayerOne = sc.nextInt(); final int numberPlayerTwo = sc.nextInt(); return new Pair(numberPlayerOne, numberPlayerTwo); } private static class Pair { private final int numberPlayerOne; private final int numberPlayerTwo; private Pair(final int numberPlayerOne, final int numberPlayerTwo) { this.numberPlayerOne = numberPlayerOne; this.numberPlayerTwo = numberPlayerTwo; } } }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Вернуть 1, если числа являются сторонами треугольника Пифагора, иначе вернуть 0
Для всех заданий входные данные передаются в подпрограмму через стек, а результат возвращается.

Вернуть массив из метода
Добрый день! Подскажите есть метод NameButton сам метод возвращает все строки с БД нормально но при.

Вернуть 2 переменные из метода
Мне нужно вернуть 2 переменные сразу,для дальнейшей обработки Tuple не подходит,так как та.
Вернуть значение из метода
Доброго времени суток. Помогите пожалуйста решить вопрос. Есть класс с методом, есть глобальная.
Java — Вернуть несколько значений из функции
Вопрос: нередко нужно вернуть несколько значений из функции, в языке С++ сделать это можно через возврат значений по указателям/ссылкам, но в Java такого механизма нет. Что делать? Ответ:
1) иногда в таких случаях возвращают массив значений, однако проблемы возникают если значения имеют различный тип. Кроме того, в таком коде легко сделать ошибки, которые будут выявлен только в момент выполнения программы. Например, вернуть массив из одного элемента, программа скомпилируется, но в процессе выполнения произойдет доступ ко второму элементу массива и программа «упадет». 2) более гибким решением является использование класса Pair, в стандартной библиотеке нет такого класса, но его не сложно реализовать самостоятельно:
public class Pair < public T1 first; public T2 second; public Pair(T1 _first, T2 _second) < first = _first; second = _second; >>
Тут приведена шаблонная реализация этого класса. Значения T1 и T2 тут являются типами данных, подставляемыми в момент использования класса. Так, например, Pair
Pair foo() < return new Pair(1, "hello"); >
Если надо вернуть 3 и более аргументов — то в качестве шаблонов T1 и T2 может быть подставлена еще одна пара.
Как вернуть несколько значений из функции java
В Java мы не можем вернуть несколько значений из метода, только одно. Но мы можем возвратить массив, список или мапу, содержащие нужные нам данные. Например :
public static ListInteger> func() int a=1, b=2, c=3; return List.of(a, b, c); >
Также можно описать класс, содержащий несколько переменных разных типов, и вернуть объект этого класса.
// пусть нам необходимо вернуть число, строку и логическое значение class MyClass private int age; private String name; private boolean isMan; public MyClass(int age, String name, boolean isMan) this.age = age; this.name = name; this.isMan = isMan; > public int getAge() return age; > public String getName() return name; > public boolean getIsMan() return isMan; > >
Получение объекта с несколькими параметрами из метода :
public class App public static void main(String[] args) throws Exception MyClass x = func(); // получаем объект нашего класса System.out.println(x.getAge() + " " + x.getName() + " " + x.getIsMan()); // => 20 Ivan true > // метод, возвращающий несколько значений в виде объекта public static MyClass func() // создаем объект нашего класса и возвращаем его return new MyClass(20, "Ivan", true); > >
