Java 基于JTextField(sin、cos、tan)的输入运行非标准评估

Java 基于JTextField(sin、cos、tan)的输入运行非标准评估,java,swing,jlabel,jtextfield,scriptengine,Java,Swing,Jlabel,Jtextfield,Scriptengine,我正在编写一个程序,该程序利用提供的库ScriptEngineManager尝试编写一个数学计算器,它超出了+、-、/和*的基本函数。如何在现有代码中实现这一点 我已经尝试使用.replace,尽管可能是我实现错误了 import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.script.ScriptEngine; import javax.script.ScriptEngineM

我正在编写一个程序,该程序利用提供的库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);
}
}

它目前只需将文本字段中的文本更改为正确的答案,即可用于标准计算,如上面提供的(+、-、*、/)。我如何实现更复杂的数学

,所以目前您只需将输入文本放入JavaScript引擎中,并希望它能正常工作。如果您真的想坚持这种方法,用户必须了解JavaScript才能使用计算器。例如,如果您输入
Math.sin(42)
,您将得到
42
的正弦值


如果您想要实现一个更方便的数学语法,类似于真实的数学,那么您需要为数学表达式编写自己的脚本引擎。有一些库可以提供帮助,但您需要很好地了解自己在做什么。

因此,目前您只需将输入文本放入JavaScript引擎,并希望它能够正常工作。如果您真的想坚持这种方法,用户必须了解JavaScript才能使用计算器。例如,如果您输入
Math.sin(42)
,您将得到
42
的正弦值


如果您想要实现一个更方便的数学语法,类似于真实的数学,那么您需要为数学表达式编写自己的脚本引擎。有一些库可以提供帮助,但您需要充分了解您正在做的事情。

谢谢您提供的信息,我想我可以添加具有正确实现的帮助面板。谢谢您提供的信息,我想我可以添加具有正确实现的帮助面板。