Формула в строку Java

219
07 февраля 2018, 12:58

Задача: Составить таблицу значений функции y = f(x) на отрезке [n; m] с шагом k

Собственно вопрос возникает в моменте. Как ввести f(x). Ибо сама формула (для примера х-2), является строкой, а значение Y числом. т.е. Через сканер вводим все значения n,m,k и саму формулу "x-2" или любую другую. И в коде эту формулу применяем для подсчета значение Y.

while(x<=r.m){
        y=x-5;
        System.out.println("x = " +x+" y = "+ y);
        x=x+r.k;
}

В данном случае у меня стоит формула, введенная изначально "y=х-5" (вторая строчка, введено топорно, прямо в код), а мне надо, чтоб программа считала ту, которую я введу через сканер.

upd. После большого количества прочитанного и опробованного, хочется добавить, что введеное через сканер представляет собой цисловые значения, букву X и знаки арифметических вычислений ("+","-","/","*").

Answer 1

Решение ленивого человека выглядит так:

import javax.script.*;
public class Eval
{
    public static void main (String[] args) throws Exception
    {
        ScriptEngineManager engineManager = new ScriptEngineManager();
        ScriptEngine engine = engineManager.getEngineByName("nashorn");
        engine.put("x", 1);
        System.out.println(engine.eval("x * 2 + 1"));
    }
}

В Java есть полноценный движок JavaScript (на русском), который отлично справляется с вычислением произвольных математических выражений (и не только их).

Решение же человека, которому описанная задача прилетела в виде лабораторной работы или домашнего задания выглядит сложнее. Преподаватель, скорее всего, ожидает, что вы разберёте вводимую строку на токены (переменная, оператор, число), переведёте её в обратную польскую запись, а затем вычислите, используя стековую машину (раз, два).

READ ALSO
Как запустить rest-client в 3 потока?

Как запустить rest-client в 3 потока?

Написал рест клиент для выгрузки данных:

310
Почему крашится LoaderManager при переключении вкладки ViewPager?

Почему крашится LoaderManager при переключении вкладки ViewPager?

В главной активности у меня стоит ViewPager перелистывающий 4 страницы (фрагмента)В 1 фаргменте используется LoaderManager для асинхронной загрузки...

256
Как добавить вторую очередь для ответа @JmsListner

Как добавить вторую очередь для ответа @JmsListner

Добрый день! Есть listener, который слушает очередь JMS MQ и отправляет ответ по умолчаниюВозможно ли добавить вторую очередь для ответов и сформировать...

204
jmeter hazelcast

jmeter hazelcast

Написал java request для Jmeter,который получает объект по ключу из hazelcastОбъект я вижу только в логах Jmeter

178