Obliczanie działań z użyciem String

0

Witam,

Chciał bym zapytać czy w ogóle jest możliwe użycie zmiennej String która będzie wprowadzona przez użytkownika (działania matematyczne), a następnie za pomocą skryptu te działanie zostanie obliczone i wyświetlone w odpowiednim oknie.

To co zrobiłem to:
Utworzyłem UI w którym są przyciski ( większość przycisków wpisuje w pole tekstowe "input" działania).
Przycisk "wykonaj" który zaczyna wykonywać funkcję i wyświetlić ją w innym polu tekstowym "output".
to mam w głównym pliku:

private void jButton24ActionPerformed(java.awt.event.ActionEvent evt) {                                          
        licz wyniku = new licz();
        String dana = String.valueOf(input.getText());
        licz.licz(dana);
        output.setText(wyniku.liczenie(result));
      

oraz funkcja w pliku licz:

import static java.lang.Math.*;

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class licz extends kalk{
  public static void licz(String dane) throws Exception{
    ScriptEngineManager sem = new ScriptEngineManager();
    ScriptEngine scriptEngine = sem.getEngineByName("JavaScript");
    String expr = dane;
    System.out.println(scriptEngine.eval(expr));
    }
}

Męczę to już dwa dni i non stop coś nie pasuje.
Ten kod z ostatniej funkcji znalazłem w internecie i próbowałem dopasować. Normalnie uruchomiony działa:

import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class expressionEvaluate{
  public static void main(String[] args) throws Exception{
    ScriptEngineManager sem = new ScriptEngineManager();
    ScriptEngine scriptEngine = sem.getEngineByName("JavaScript");
    String expr = "1*3+5";
    System.out.println(scriptEngine.eval(expr));
    } 
}

Jeśli jest potrzeba to prześlę cały kod tylko że tam nie ma nic nadzwyczajnego oprócz definicji w GUI.

Pozdrawiam

0

Poczytaj o konwersji wyrażenia na ONP. Wtedy będziesz mógł policzyć każde (poprawne) wyrażenie. Z tego co widzę to próbujesz wywołać skrypt JavaScript w javie, co raczej nie ma sensu.

0

Dzięki za odpowiedź, czytałem o ONP ale na razie to dla mnie zbyt skomplikowane. Ja jestem początkującym amatorem Javy i szukam najprostszych rozwiązań "byle by działało".

Udało mi się naprawić mój kod aby odpytywał Javascript żeby przeliczyć równanie.

private void jButton24ActionPerformed(java.awt.event.ActionEvent evt) {
        licz wynik = new licz();
        String dane = String.valueOf(input.getText());
        try {
            licz.licz(dane);
            output.setText(licz.licz(dane));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;

public class licz extends kalk{
    public static String licz(String dane) throws Exception{
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine scriptEngine = sem.getEngineByName("JavaScript");
        String x = dane;
    return scriptEngine.eval(x).toString();
    }
}

Teraz tylko dodać obsługę błędu składni oraz dzielenia przez zero i to chyba wszystko.

1 użytkowników online, w tym zalogowanych: 0, gości: 1