Obliczanie działań z użyciem String

Obliczanie działań z użyciem String
Henryk Heisig
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:2
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:

Kopiuj
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:

Kopiuj
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:

Kopiuj
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

edytowany 1x, ostatnio: Henryk Heisig
CountZero
  • Rejestracja:ponad 7 lat
  • Ostatnio:11 miesięcy
  • Postów:262
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.

jarekr000000
Akurat wywołanie js w javie ma jak najbardziej sens. Po to jest ten script engine zrobiony
CountZero
No tak, ale rozwiązanie tego w Javie to jedna metoda :/.
CountZero
Tym bardziej jak się zaczyna programować w Javie
jarekr000000
To pokaż tą metodę. Js imo to najkrótsza droga. Albo zewnetrzna biblioteka.
CountZero
W sensie nie w SE, czy gdzieś w frameworku - samemu do napisania (wklejenia). Na internecie jest pełno prostych rozwiązań jak się samemu nie chce pisać.
Henryk Heisig
  • Rejestracja:około 7 lat
  • Ostatnio:ponad 6 lat
  • Postów:2
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.

Kopiuj
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();
        }
    }
Kopiuj
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.