Выполнение нестандартных оценок на основе входных данных из JTextField (sin, cos, tan) - PullRequest
0 голосов
/ 10 мая 2019

Я пишу программу, которая использует предоставленную библиотеку ScriptEngineManager, чтобы попытаться написать математический калькулятор, который выходит за рамки основных функций +, -, / и *.Как бы я мог реализовать это в существующем коде?

Я уже пытался использовать .replace, хотя возможно, что я его неправильно реализовал.

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class GUIRunner {

    public static void main(String args[]) {
        JFrame f = new JFrame("megamath1.0");
        f.setSize(300,300); 
        f.setLocation(100,150);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JFrame.setDefaultLookAndFeelDecorated(true);
        JLabel labelM = new JLabel("Enter Equation: ");
        labelM.setBounds(50, 50, 200, 30);
        JLabel label = new JLabel(); 
        label.setBounds(50,100,200,30);
        label.setVisible(true);
        JTextField motto1 = new JTextField();
        //set size of the text box
        motto1.setBounds(50, 100, 200, 30);
       //add elements to the frame
        f.add(labelM);
        f.add(motto1);
        f.setLayout(null);
        f.setVisible(true);
        JButton b = new JButton("Submit");
        b.setBounds(50, 150, 100, 30);
        b.addActionListener(new ActionListener() {
         @Override
            public void actionPerformed(ActionEvent arg0) {
                String inputText = motto1.getText(); 

            ScriptEngineManager mgr = new ScriptEngineManager();
            ScriptEngine engine = mgr.getEngineByName("JavaScript");
                try {
                motto1.setText("Output: " + engine.eval(inputText));
                } catch (ScriptException e) {
                // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

       });
       //add button to the frame
       f.add(b);
       f.add(label);
}
}

В настоящее время он работает для стандартных вычислений, таких как приведенные выше (+, -, *, /), просто заменяя текст в текстовом поле на правильный ответ.Как я мог реализовать более сложную математику

1 Ответ

1 голос
/ 10 мая 2019

Так что на данный момент вы только помещаете введенный текст в движок JavaScript и надеетесь, что это сработает. Если вы действительно хотите придерживаться этого подхода, пользователь должен знать JavaScript, чтобы использовать калькулятор. Например, если вы введете Math.sin(42), вы получите значение синуса 42.

Если вы хотите реализовать более удобный математический синтаксис, похожий на настоящий математический, вам необходимо написать собственный скрипт-движок для математических выражений. Есть библиотеки, которые могут помочь с этим, но вам нужно хорошее понимание того, что вы делаете.

...