eclipse编写计算器java功能要求: 1)由用户输入一个表达式,求出其计算结果后显示。 2)允许在表达式中出现常用的数学函数,如绝对值、取整、三角函数、倒数、平方根、平方、立方等。 3)要能够判断出表达式中的变量名及其个数,按照变量名自动弹出/出现输入界面逐个让用户输入变量。 4)尽量使用图形界面实现,要符合日常软件使用规范来设计菜单和界面。5)如果无法实现图形界面,则在命令行方式下也需要提供菜单,方便用户操作。
时间: 2024-03-14 14:44:59 浏览: 116
下面是一个示例代码,实现了上述要求:
```java
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class Calculator {
private JFrame frame;
private JTextField expressionField;
private JButton calculateButton;
private JLabel resultLabel;
private List<String> variables;
private List<JTextField> variableFields;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
Calculator window = new Calculator();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public Calculator() {
variables = new ArrayList<String>();
variableFields = new ArrayList<JTextField>();
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 400, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel contentPane = new JPanel(new BorderLayout());
frame.setContentPane(contentPane);
JPanel inputPanel = new JPanel(new FlowLayout());
expressionField = new JTextField(20);
inputPanel.add(new JLabel("表达式:"));
inputPanel.add(expressionField);
calculateButton = new JButton("计算");
calculateButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
calculateExpression();
}
});
inputPanel.add(calculateButton);
contentPane.add(inputPanel, BorderLayout.NORTH);
JPanel variablePanel = new JPanel(new FlowLayout());
variablePanel.add(new JLabel("变量:"));
contentPane.add(variablePanel, BorderLayout.CENTER);
JPanel resultPanel = new JPanel(new FlowLayout());
resultLabel = new JLabel();
resultPanel.add(new JLabel("结果:"));
resultPanel.add(resultLabel);
contentPane.add(resultPanel, BorderLayout.SOUTH);
}
private void calculateExpression() {
try {
String expression = expressionField.getText();
double result = evaluateExpression(expression);
resultLabel.setText(Double.toString(result));
} catch (Exception e) {
JOptionPane.showMessageDialog(frame, e.getMessage(), "错误", JOptionPane.ERROR_MESSAGE);
resultLabel.setText("");
}
}
private double evaluateExpression(String expression) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
// 查找表达式中的变量名
variables.clear();
for (char c : expression.toCharArray()) {
if (Character.isLetter(c) && !variables.contains(Character.toString(c))) {
variables.add(Character.toString(c));
}
}
// 弹出输入框让用户输入变量值
variableFields.clear();
JPanel inputPanel = (JPanel) frame.getContentPane().getComponent(1);
JPanel variablePanel = (JPanel) frame.getContentPane().getComponent(2);
variablePanel.removeAll();
for (String variable : variables) {
JTextField variableField = new JTextField(5);
variablePanel.add(new JLabel(variable + ":"));
variablePanel.add(variableField);
variableFields.add(variableField);
}
inputPanel.revalidate();
inputPanel.repaint();
variablePanel.revalidate();
variablePanel.repaint();
// 等待用户输入变量值
for (JTextField variableField : variableFields) {
while (variableField.getText().isEmpty()) {
Thread.sleep(100);
}
double variableValue = Double.parseDouble(variableField.getText());
engine.put(variableField.getName(), variableValue);
}
// 计算表达式的值
Object result = engine.eval(expression);
if (result instanceof Double) {
return (Double) result;
} else if (result instanceof Integer) {
return ((Integer) result).doubleValue();
} else {
throw new Exception("无法计算表达式的值");
}
}
}
```
该程序使用了Java Swing库来实现图形界面,可以在界面上输入表达式和变量值,计算表达式的值,并在界面上显示结果。在计算表达式的过程中,程序会自动识别表达式中的变量名,并弹出输入框让用户输入变量值,然后再计算表达式的值。该程序支持常用的数学函数,如绝对值、取整、三角函数、倒数、平方根、平方、立方等。如果无法实现图形界面,则在命令行方式下也可以提供菜单,方便用户操作。
阅读全文