فارسی
باز کردن در Telegram

رشتهٔ گفتگو Всем спокойного утра!

2 پیام · –
M
Всем спокойного утра! Сегодня я покажу вам очень крутую JAVA штучку, и сделаем полноценный калькулятор в пару строк. Intro И так, работать мы сегодня будем с JShell. Вы скажите, чел, это утилита командной строки(АНАЛог Python REPL). Да так и есть, но еще у нее есть JDK API(как то так), оно позволяет нам использовать JShell прямо в коде. Начало Долго тянуть не будем, поэтому сразу за код. Создаем класс и главный метод, а в нем пишем: try (JShell shell = JShell.create()) { } catch (Exception e) { e.printStackTrace(); } И не забудте импортировать Необходимое: import jdk.jshell.*; import java.util.List; Здесь мы инициализировали JShell. Теперь дальше: в этом же try-catch пишем: List<SnippetEvent> ses = shell.eval("int i = 5 * 2;"); // любое Java выражение, или кусок кода. for (SnippetEvent se : ses) { System.out.println(se.value()); } Здесь мы даем JShell API вычислить наш кусок кода, или выражение, а потом собираем результат. Давайте напишем калькулятор! И так. 2 класса. начнем с первого, класс Calc.java: // Импортируем JShell. import jdk.jshell.JShell; import jdk.jshell.Snippet; import jdk.jshell.SnippetEvent; import java.util.List; public class Calc { private final JShell shell = JShell.create(); // Создаем JShell. public void shutdown() { Runtime.getRuntime().addShutdownHook(new Thread(shell::close)); // Закрываем ее при завершении работы программы. } /** * Метод, который решает уравнение, введеное пользователем. Сердце нашего калькулятора. * @param input - Строка-уровнение, которую нужно вычеслить. * @return - возвращает результат вычеслений. */ public String calc(String input) { List<SnippetEvent> events = shell.eval("var x = " + input + ";"); SnippetEvent event = events.getFirst(); if (event.status() == Snippet.Status.VALID) { // Проверка на валидный ввод. return event.value(); } else { return "Error: invalid expression"; } // Вычисляем, и возвращаем резултат. /* .getFirst - потому что у нас очень простая задача, и там только 1 результат. .value() - результат сниппета. */ } } Теперь класс Main.java: //Импортируем сканер. import java.util.Scanner; public class Main { /** * Главныый метод программы. * @param args - хз. Аргументы командной строки. */ public static void main(String[] args) { // Создаем калькулятор. Calc calc = new Calc(); calc.shutdown(); // вешаем задачю, чтобы закрыть наш "калькулятор" // Scanner в try-with-resource, для автозакрытия. try (Scanner scanner = new Scanner(System.in)) { while (true) { // цикл для взаимодействия с пользователем. String input = scanner.nextLine(); // Читаем строку. if (input.equals("stop")) break; System.out.println(calc.calc(input)); // Выводим результат. } } } } Как видите, JShell - очень мощный инструмент. Спасибо за внимание, надеюсь было интересно. P.S На питоне* так можно было сделать в одну строку: while True: print(eval(input('Ввел пример, быстро.'))) * Сделан для геев, и запрещен у настоящих мужиков.
  1. 0
    Это можно провернуть через любую консоль )))

فید عمومی باز از ایندکس جست‌وجو ChatCrawler — «Google برای Telegram عمومی»؛ با خزش انجمن به‌روز می‌شود. زمان‌ها به UTC است.

فقط محتوای عمومی، API رسمی Telegram. دربارهٔ ما · پرسش‌ها · محدودیت‌های ایندکس · حذف یک صفحه · کاتالوگ · جست‌وجو · روش محاسبهٔ ما