图形界面科学计算器
功能:用户界面模拟真实计算器(具体可参考手机计算器APP),显示0~9按键、+、-、*、/运算符和小数点、=、(),按下对应按键,算式区域(可用Label组件)显示用户输入的内容,按等号,计算结果并显示。
要求:
1.采用图形用户界面
2.正常输入算式,计算出正确的结果
编程提示:
- 编写计算器类,该类中有计算方法(calculate(String str)),该方法的参数为输入的四则混合运算的字符串,功能是将字符串表达式计算出结果(具体算法,需要数据结构课程中,“栈”部分的示例程序,注意数据类型需要转化为浮点型。需要创建运算符和运算数栈,然后根据扫描的字符串决定进、出栈操作),网络上可查到示例程序。
2.创建图形用户界面,布局可选择GridLayer或Box布局管理器,添加按键均为JButton组件。 - 在所有创建的按键(JButton对象)上增加事件侦听,对鼠标事件响应。对所有按键均可增加同一类事件监听器类实例,根据按键显示不同(用getText()方法获取),除等号外,均直接将按键文本加入到用于输出结果的Label组件中(在自定义的事件监听器类中,可设置一个Label成员变量,在实例化对象时,从事件触发处把Label组件赋值给该变量,可实现在监听响应中操作该组件的文本内容)
扩展:
(1)模拟计算器的外观,提供显示历史记录,用来显示输入的表达式等
这是一个比较复杂的项目,需要结合图形界面和计算逻辑。下面是一个简单的示例代码,基于Java Swing实现了一个图形界面科学计算器:文章来源:https://www.toymoban.com/news/detail-776542.html
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class CalculatorGUI extends JFrame {
private JLabel resultLabel;
private StringBuilder expression;
public CalculatorGUI() {
setTitle("Calculator");
setSize(300, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
expression = new StringBuilder();
resultLabel = new JLabel("0");
resultLabel.setHorizontalAlignment(JLabel.RIGHT);
resultLabel.setFont(new Font("Arial", Font.BOLD, 24));
JPanel buttonPanel = new JPanel(new GridLayout(5, 4));
String[] buttonLabels = {
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "-",
"0", ".", "=", "+",
"(", ")", "C", "DEL"
};
for (String label : buttonLabels) {
JButton button = new JButton(label);
button.addActionListener(new ButtonClickListener());
buttonPanel.add(button);
}
add(resultLabel, BorderLayout.NORTH);
add(buttonPanel, BorderLayout.CENTER);
}
private class ButtonClickListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
String buttonText = ((JButton) e.getSource()).getText();
switch (buttonText) {
case "=":
calculateResult();
break;
case "C":
clearExpression();
break;
case "DEL":
deleteLastCharacter();
break;
default:
appendToExpression(buttonText);
break;
}
}
private void calculateResult() {
try {
double result = calculate(expression.toString());
resultLabel.setText(Double.toString(result));
} catch (Exception ex) {
resultLabel.setText("Error");
}
}
private double calculate(String expression) {
// 这里使用你提到的栈的算法来计算表达式的结果
// 可以使用现有的算法或自行实现
// 返回计算结果
return 0.0;
}
private void clearExpression() {
expression.setLength(0);
resultLabel.setText("0");
}
private void deleteLastCharacter() {
if (expression.length() > 0) {
expression.deleteCharAt(expression.length() - 1);
resultLabel.setText(expression.toString());
}
}
private void appendToExpression(String text) {
expression.append(text);
resultLabel.setText(expression.toString());
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
CalculatorGUI calculatorGUI = new CalculatorGUI();
calculatorGUI.setVisible(true);
});
}
}
这个示例实现了一个简单的科学计算器,具备基本的加减乘除和括号功能,并且能够把输入的表达式计算出结果并显示在界面上。你可以根据自己的需求进行扩展,添加历史记录等功能。请注意,这只是一个简单的示例,实际开发中还需要考虑更多的细节和异常处理。
要实现加减乘除的功能,你可以在calculate方法中使用栈来计算表达式的结果。下面是一个完善了加减乘除功能的示例代码:文章来源地址https://www.toymoban.com/news/detail-776542.html
import java.util.Stack;
public class Calculator {
public static double calculate(String expression) {
// 移除表达式中的空格
expression = expression.replaceAll("\\s+", "");
// 创建运算数栈和运算符栈
Stack<Double> operandStack = new Stack<>();
Stack<Character> operatorStack = new Stack<>();
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
// 如果是数字,解析整个数字并入栈
if (Character.isDigit(ch) || ch == '.') {
StringBuilder operand = new StringBuilder();
while (i < expression.length() && (Character.isDigit(expression.charAt(i)) || expression.charAt(i) == '.')) {
operand.append(expression.charAt(i));
i++;
}
i--;
operandStack.push(Double.parseDouble(operand.toString()));
}
// 如果是运算符
else if (isOperator(ch)) {
// 如果运算符栈不为空且栈顶运算符优先级大于等于当前运算符,则先进行计算
while (!operatorStack.isEmpty() && hasPrecedence(operatorStack.peek(), ch)) {
double operand2 = operandStack.pop();
double operand1 = operandStack.pop();
char operator = operatorStack.pop();
double result = performOperation(operator, operand1, operand2);
operandStack.push(result);
}
// 将当前运算符入栈
operatorStack.push(ch);
}
// 如果是左括号,直接入栈
else if (ch ==
到了这里,关于图形界面科学计算器 功能:用户界面模拟真实计算器(具体可参考手机计算器APP),显示0~9按键、+、-、*、/运算符和小数点、=、(),按下对应按键,算式区域(可用Label组件)显示用户输入的内容,的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!