Как вызвать значение метода в другом методе
Странный вопрос, понимаю. Постараюсь объяснить. Но дойдя до 8 лекции 3 уровня мне захотелось написать программу, которая хоть отдаленно будет похожа на реальную программу)) Ну так сказать приблизил себя к реальности. У меня есть сотрудник. Он получает з/п почасово Он из Украины и мне постоянно нужно много времени считать сколько ему перевести Решил написать программу, которая будет считать сколько в рублях и гривнах ему перевести за ? количество часов Мы прошли ввод с клавиатуры, поэтому я подумал будет классно написать Но столкнулся с проблемой! 1. Написал метод. Суть его в том, чтобы ввести с клавиатуры количество часов и вернуть сумму в рублях.
public static int raschetZpVadima() throws Exception int vadimStavka = 250; System.out.println("Введите количество отработанных часов"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String sHour = reader.readLine(); int hour = Integer.parseInt(sHour); int zpVadima = hour * vadimStavka; return zpVadima; >
2. Далее я начал втыкаться. Я получил сумму в рублях и теперь могу ее перевести в гривны Но в методе есть только один return после него он заканчивает свой расчет. Значит нужно писать другой метод, что наверное логично я написал второй метод, который берет значение из первого метода и делит на курс
public static double convertUa() throws Exception return zpVadima.raschetZpVadima() / 2.67; >
public static void main(String[] args) throws Exception System.out.println("К выплате Вадиму: " + raschetZpVadima() + " рублей"); System.out.println("или " + convertUa() + " гривен."); >
Получается программа начинает работу введите число часов ввожу например 9 жму enter все считается отлично по первому методу и выводит в консоль ответ К выплате Вадиму: 2250 рублей Введите количество отработанных часов Понимаете, т.е. для расчета второго метода мне снова нужно внести число часов, а я хотел получить сразу 2 ответа на каждой строке т.е. чтобы главный метод вызвал сначала метод 1, а потом метод 2 исходя из одной переменной введенной с клавиатуры. Вот весь мой вопрос! Простите за сумбурность и тупость, но я перепробовал все. в любом случае происходит повторный запуск метода 1 и в нем он просит указать значение количества часов. . Пожалуйста, подскажите бедалаге, что нужно сделать. Желательно решение исходя из знаний полученных в первых 3-х уровнях. Если есть возможность ткните в нужную лекцию, если это ранее разбиралось ,а я пропустил. Я обязательно перечитаю ибо я уверен, что можно пользоваться полученными результатами из одного метода в другом не перезапуская его снова Заранее спасибо всем откликнувшимся. P.S. Сейчас за незнанием решения я сделал вот такой костыль и мой код всей программы вроде работает, но я понимаю, что он убог))
package zpVadima; import java.io.*; import java.util.*; public class zpVadima public static void main(String[] args) throws Exception int zpVadimaInRub = raschetZpVadima(); double kursUa = 2.67; double zpVadimaInUa = zpVadimaInRub / kursUa; System.out.println("К выплате Вадиму: " + zpVadimaInRub + " рублей"); System.out.println("или " + zpVadimaInUa + " гривен."); > public static int raschetZpVadima() throws Exception int vadimStavka = 250; System.out.println("Введите количество отработанных часов"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String sHour = reader.readLine(); int hour = Integer.parseInt(sHour); int zpVadima = hour * vadimStavka; return zpVadima; > >
Передача метода в качестве параметра в Java
- Передача метода в качестве параметра с помощью функции lambda в Java
- Передача метода в качестве параметра пользовательскому методу в Java
- Передача метода в качестве параметра с помощью справочника по методам в Java
В этом руководстве описывается передача метода в качестве параметра в Java. Чтобы помочь вам разобраться в этой теме, мы включили примеры кодов.
В Java с нуля нет концепции метода передачи в качестве параметра. Однако мы можем добиться этого, используя ссылку на лямбда-функцию и метод в Java 8. Итак, в этой статье мы сосредоточимся на этих двух темах, чтобы передать метод в качестве параметра.
Лямбда-функция или лямбда-выражение — это концепция, которая была введена в Java 8. Это краткий способ написать функцию, следуя подходу функционального стиля. Поскольку Java и Java 8 считаются объектно-ориентированными языками, они поддерживают функциональный подход к написанию кода.
Передача метода в качестве параметра с помощью функции lambda в Java
Это простой пример лямбда-выражения, в котором мы используем его для перебора элементов ArrayList . Обратите внимание, что мы передаем лямбда-функцию методу forEach() интерфейса Iterable . Класс ArrayList реализует интерфейс Iterable .
Вот как мы можем передать метод (лямбда-функцию) в качестве параметра в Java:
public class SimpleTesting public static void main(String[] args) ArrayListInteger> evens = new ArrayListInteger>(); evens.add(10); evens.add(20); evens.add(30); evens.add(40); evens.forEach( (n) -> System.out.println(n); > ); // passing lambda as a parameter > >
Передача метода в качестве параметра пользовательскому методу в Java
Помимо встроенного метода forEach() , мы можем передать его в качестве параметра пользовательскому методу. В этом примере мы создали интерфейс Doable , имеющий метод doSomething() . В классе SimpleTesting есть метод show() , который вызывает метод doSomething() . Внутри метода main () мы создали лямбда-функцию и передали ее методу show() .
Обратите внимание, что это строка, в которой мы передаем метод (лямбда-функцию) в качестве параметра методу.
show("Hello", doa); // passing lambda function as parameter
Как передать метод в качестве параметра java
Передать метод в качестве параметра можно разными способами. Рассмотрим некоторые из них.
1) Воспользуемся функциональным интерфейсом Predicate :
import java.util.List; import java.util.function.Predicate; import java.util.stream.Collectors; public class App public static void main(String[] args) ListString> list1 = List.of("1", "22", "333", "4444"); ListString> filteredList1 = filterList(list1, x -> x.length() >= 3); System.out.println(filteredList1); // => [333, 4444] ListInteger> list2 = List.of(1, 2, 3, 4); ListInteger> filteredList2 = filterList(list2, x -> x >= 3); System.out.println(filteredList2); // => [3, 4] > public static T> ListT> filterList(ListT> list, PredicateT> rool) return list.stream() .filter(x -> rool.test(x)) .collect(Collectors.toList()); > >
2) Воспользуемся готовым функциональным интерфейсом UnaryOperator :
public static void superMethod(UnaryOperatorString> method) String str = "Hexlet"; String result = method.apply(str); System.out.println(result); > // вызов с передачей методов public class App public static void main(String[] args) throws Exception // передадим стандартный метод superMethod(String::toUpperCase); // => HEXLET // передадим лямбда-функцию superMethod(s -> s + "!"); // => hexlet! // передадим собственный метод superMethod(App::reverse); // => telxeh > public static String reverse(String str) StringBuilder builder = new StringBuilder(); builder.append(str); return builder.reverse().toString(); > >
3) Создадим собственный интерфейс и передадим объект этого типа в нашу функцию :
interface MyInterface int count(int a, int b, int c); > public static void superMethodInterface(MyInterface method) int a = 5, b = 10, c = 20; int result = method.count(a, b, c); System.out.println(result); > // вызов с передачей методов public class App public static void main(String[] args) throws Exception MyInterface count = new MyInterface() @Override public int count(int a, int b, int c) return a + b + c; > >; superMethodInterface(count); // => 35 superMethodInterface((a,b,c) -> a * b * c); // => 1000 superMethodInterface((a,b,c) -> a + b - c); // => -5 > >
4) Получим метод с помощью рефлексии и передадим его :
public static void superMethodReflection(Object object, Method method) throws Exception int a = 10; int b = 20; int result = (int) method.invoke(object, a, b); System.out.println(result); > // вызов с передачей методов public class App public static void main(String[] args) throws Exception // передадим стандартный метод Method method = Integer.class.getDeclaredMethod("max", int.class, int.class); superMethodReflection(0, method); // => 20 method = Integer.class.getDeclaredMethod("sum", int.class, int.class); superMethodReflection(0, method); // => 30 // передадим собственный метод method = App.class.getDeclaredMethod("concate", int.class, int.class); superMethodReflection(new App(), method); // => 1020 > public static int concate(int a, int b) return Integer.parseInt("" + a + b); > >