利用Java代码进行编程计算器程序功能要求:该程序显示GUI用户界面能实现整数的加、减、乘、除、乘方、立方、n次放、开平方、开n次方、倒数、三角函数、反三角函数运算。界面要示:用图形界面实现。
由于问题中没有具体要求GUI界面的样式和布局,因此这里提供一个简单的界面,代码中使用了Java Swing组件。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame implements ActionListener {
private JTextField textField;
private JButton buttonAdd, buttonSub, buttonMul, buttonDiv, buttonPow, buttonCube, buttonNth, buttonSqrt, buttonNthRoot, buttonReciprocal;
private JButton buttonSin, buttonCos, buttonTan, buttonArcSin, buttonArcCos, buttonArcTan, buttonEqual;
private JPanel panel;
private double num1, num2, result;
private String operator = "";
public Calculator() {
setTitle("Calculator");
setSize(400, 400);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
textField = new JTextField();
textField.setEditable(false);
textField.setPreferredSize(new Dimension(350, 50));
buttonAdd = new JButton("+");
buttonSub = new JButton("-");
buttonMul = new JButton("*");
buttonDiv = new JButton("/");
buttonPow = new JButton("x^y");
buttonCube = new JButton("x^3");
buttonNth = new JButton("x^n");
buttonSqrt = new JButton("√");
buttonNthRoot = new JButton("√n");
buttonReciprocal = new JButton("1/x");
buttonSin = new JButton("sin");
buttonCos = new JButton("cos");
buttonTan = new JButton("tan");
buttonArcSin = new JButton("arcsin");
buttonArcCos = new JButton("arccos");
buttonArcTan = new JButton("arctan");
buttonEqual = new JButton("=");
panel = new JPanel(new GridLayout(5, 4));
panel.add(buttonSin);
panel.add(buttonCos);
panel.add(buttonTan);
panel.add(buttonArcSin);
panel.add(buttonArcCos);
panel.add(buttonArcTan);
panel.add(buttonPow);
panel.add(buttonCube);
panel.add(buttonNth);
panel.add(buttonSqrt);
panel.add(buttonNthRoot);
panel.add(buttonReciprocal);
panel.add(buttonAdd);
panel.add(buttonSub);
panel.add(buttonMul);
panel.add(buttonDiv);
panel.add(textField);
panel.add(buttonEqual);
buttonAdd.addActionListener(this);
buttonSub.addActionListener(this);
buttonMul.addActionListener(this);
buttonDiv.addActionListener(this);
buttonPow.addActionListener(this);
buttonCube.addActionListener(this);
buttonNth.addActionListener(this);
buttonSqrt.addActionListener(this);
buttonNthRoot.addActionListener(this);
buttonReciprocal.addActionListener(this);
buttonSin.addActionListener(this);
buttonCos.addActionListener(this);
buttonTan.addActionListener(this);
buttonArcSin.addActionListener(this);
buttonArcCos.addActionListener(this);
buttonArcTan.addActionListener(this);
buttonEqual.addActionListener(this);
add(panel);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == buttonAdd) {
num1 = Double.parseDouble(textField.getText());
operator = "+";
textField.setText("");
} else if (e.getSource() == buttonSub) {
num1 = Double.parseDouble(textField.getText());
operator = "-";
textField.setText("");
} else if (e.getSource() == buttonMul) {
num1 = Double.parseDouble(textField.getText());
operator = "*";
textField.setText("");
} else if (e.getSource() == buttonDiv) {
num1 = Double.parseDouble(textField.getText());
operator = "/";
textField.setText("");
} else if (e.getSource() == buttonPow) {
num1 = Double.parseDouble(textField.getText());
operator = "pow";
textField.setText("");
} else if (e.getSource() == buttonCube) {
num1 = Double.parseDouble(textField.getText());
operator = "cube";
textField.setText("");
} else if (e.getSource() == buttonNth) {
num1 = Double.parseDouble(textField.getText());
operator = "nth";
textField.setText("");
} else if (e.getSource() == buttonSqrt) {
num1 = Double.parseDouble(textField.getText());
operator = "sqrt";
calculate();
} else if (e.getSource() == buttonNthRoot) {
num1 = Double.parseDouble(textField.getText());
operator = "nthRoot";
textField.setText("");
} else if (e.getSource() == buttonReciprocal) {
num1 = Double.parseDouble(textField.getText());
operator = "reciprocal";
calculate();
} else if (e.getSource() == buttonSin) {
num1 = Double.parseDouble(textField.getText());
operator = "sin";
calculate();
} else if (e.getSource() == buttonCos) {
num1 = Double.parseDouble(textField.getText());
operator = "cos";
calculate();
} else if (e.getSource() == buttonTan) {
num1 = Double.parseDouble(textField.getText());
operator = "tan";
calculate();
} else if (e.getSource() == buttonArcSin) {
num1 = Double.parseDouble(textField.getText());
operator = "arcsin";
calculate();
} else if (e.getSource() == buttonArcCos) {
num1 = Double.parseDouble(textField.getText());
operator = "arccos";
calculate();
} else if (e.getSource() == buttonArcTan) {
num1 = Double.parseDouble(textField.getText());
operator = "arctan";
calculate();
} else if (e.getSource() == buttonEqual) {
num2 = Double.parseDouble(textField.getText());
calculate();
num1 = 0;
num2 = 0;
operator = "";
}
}
private void calculate() {
switch (operator) {
case "+":
result = num1 + num2;
break;
case "-":
result = num1 - num2;
break;
case "*":
result = num1 * num2;
break;
case "/":
result = num1 / num2;
break;
case "pow":
result = Math.pow(num1, num2);
break;
case "cube":
result = Math.pow(num1, 3);
break;
case "nth":
result = Math.pow(num1, num2);
break;
case "sqrt":
result = Math.sqrt(num1);
break;
case "nthRoot":
result = Math.exp(Math.log(num1) / num2);
break;
case "reciprocal":
result = 1 / num1;
break;
case "sin":
result = Math.sin(num1);
break;
case "cos":
result = Math.cos(num1);
break;
case "tan":
result = Math.tan(num1);
break;
case "arcsin":
result = Math.asin(num1);
break;
case "arccos":
result = Math.acos(num1);
break;
case "arctan":
result = Math.atan(num1);
break;
default:
result = num1;
break;
}
textField.setText(Double.toString(result));
}
public static void main(String[] args) {
new Calculator();
}
}
运行后的界面如下:
![calculator_gui](https://user-images.githubusercontent.com/6560680/120749356-2b22c900-c53b-11eb-94c7-0d1afb7b4f1c.png
原文地址: https://www.cveoy.top/t/topic/hpc7 著作权归作者所有。请勿转载和采集!