java计算器加减乘除根号平方

package com.util;
import javax.swing.;
import java.awt.
;
import java.awt.event.;
public class caculator extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;
private boolean dotExist, operated, equaled;
private double storedNumber;
private char lastOperator; //运算符
private JTextField operation; //结果
private JButton dot, plus, minus, multi, div, sqrt, square, equal, changePN, clear;
//运算符
private JButton[] numbers; //数字
public caculator() {
setTitle(“Calculator”);
dotExist = false; //判断当前的数是否有小数点 operated = false; //判断任意运算符是否被按下
equaled = false; //判断等号是否被按下
storedNumber = 0;
lastOperator = ‘?’;
//初始化窗口变量
operation = new JTextField(“0”); operation.setEditable(false);
numbers = new JButton[10];
for (int i = 0; i < 10; i++)
numbers[i] = new JButton("" + i);
dot = new JButton(".");
plus = new JButton("+");
minus = new JButton("-");
multi = new JButton("
");
div = new JButton("/");
sqrt = new JButton(“√”);
square = new JButton(“x²”);
equal = new JButton("=");
changePN = new JButton(“负数”);
clear = new JButton(“AC”);
GridBagLayout layout = new GridBagLayout(); getContentPane().setLayout(layout); addComponent(layout, operation, 0, 0, 4, 1); addComponent(layout, numbers[1], 1, 0, 1, 1); addComponent(layout, numbers[2], 1, 1, 1, 1); addComponent(layout, numbers[3], 1, 2, 1, 1); addComponent(layout, numbers[4], 2, 0, 1, 1); addComponent(layout, numbers[5], 2, 1, 1, 1); addComponent(layout, numbers[6], 2, 2, 1, 1); addComponent(layout, numbers[7], 3, 0, 1, 1); addComponent(layout, numbers[8], 3, 1, 1, 1); addComponent(layout, numbers[9], 3, 2, 1, 1); addComponent(layout, dot, 4, 0, 1, 1); addComponent(layout, numbers[0], 4, 1, 1, 1);
addComponent(layout, sqrt, 4, 2, 1, 1); addComponent(layout, plus, 1, 3, 1, 1); addComponent(layout, minus, 2, 3, 1, 1); addComponent(layout, multi, 3, 3, 1, 1); addComponent(layout, div, 4, 3, 1, 1);
addComponent(layout, square, 5, 0, 1, 1); addComponent(layout, equal, 5, 1, 1, 1);
addComponent(layout, changePN, 5, 2, 1, 1); addComponent(layout, clear, 5, 3, 1, 1); }
//点击事件
public void actionPerformed(ActionEvent e) {
JButton btn = (JButton) e.getSource();
if (btn == clear) {
operation.setText(“0”);
dotExist = false;
storedNumber = 0;
lastOperator = ‘?’;
} else if (btn == equal) {
operate(’=’); equaled = true; }
else if (btn == plus) {
operate(’+’); equaled = false;
} else if (btn == minus) {
operate(’-’); equaled = false;
} else if (btn == multi) {
operate(’*’); equaled = false;
} else if (btn == div) {
operate(’/’);
equaled = false;
} else if (btn == changePN) {
operate(‘p’);
operate(’=’);
equaled = true;
}else if (btn == sqrt) {
operate(‘s’);
operate(’=’);
equaled = true; }

else if(btn == square) {
operate(‘q’);
operate(’=’);
equaled = true; }
else {
if (equaled)
storedNumber = 0;
for (int i = 0; i < 10; i++)
if (btn == numbers[i]) {
if (operation.getText().equals(“0”)) operation.setText("" + i);
else if (!operated) operation.setText(operation.getText() + i);
else {
operation.setText("" + i);
operated = false;
}
}
if (btn == dot && !dotExist) { operation.setText(operation.getText() + “.”);
dotExist = true;
} } }
//运算
private void operate(char operator) {
double currentNumber = Double.valueOf(operation.getText()).doubleValue();
if (lastOperator == ‘?’) storedNumber = currentNumber;
else if (lastOperator == ‘+’) storedNumber += currentNumber;
else if (lastOperator == ‘-’) storedNumber -= currentNumber;
else if (lastOperator == ‘*’) storedNumber *= currentNumber;
else if (lastOperator == ‘/’) storedNumber /= currentNumber;
else if (lastOperator == ‘p’) storedNumber *= -1;
else if (lastOperator == ‘s’) storedNumber = Math.sqrt(currentNumber);
else if (lastOperator == ‘=’ && equaled) storedNumber = currentNumber;
operation.setText("" + storedNumber);
operated = true; lastOperator = operator; }

private void addComponent(GridBagLayout layout, Component component,int row, int col, int width, int height) { {
GridBagConstraints constraints = new GridBagConstraints();
constraints.fill = GridBagConstraints.BOTH;
constraints.insets = new Insets(10, 2, 10, 2);
constraints.weightx = 100;
constraints.weighty = 100;
constraints.gridx = col;
constraints.gridy = row;
constraints.gridwidth = width;
constraints.gridheight = height; layout.setConstraints(component, constraints);
if (component instanceof JButton)
((JButton) component).addActionListener(this);
getContentPane().add(component); }
//初始化并且显示窗口
public static void main(String[] args) {
caculator calc = new caculator();
calc.setSize(290, 400);
calc.setVisible(true);
}}

好的,以下是一个可以计算加减乘除根号指数运算的中缀表达式计算器,并且支持可重复计算: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define MAX_SIZE 100 void clear_input_buffer() { int c; while ((c = getchar()) != '\n' && c != EOF); } double calculate(double num1, double num2, char operator) { switch (operator) { case '+': return num1 + num2; case '-': return num1 - num2; case '*': return num1 * num2; case '/': if (num2 == 0) { printf("Error: divide by zero\n"); return 0; } else { return num1 / num2; } case '^': return pow(num1, num2); case 'r': return pow(num2, 1.0/num1); default: printf("Invalid operator\n"); return 0; } } int main() { double stack[MAX_SIZE]; char operator_stack[MAX_SIZE]; int top = -1, operator_top = -1; double num, result; char operator, input[MAX_SIZE]; while (1) { printf("Enter an expression (or 'q' to quit): "); fgets(input, MAX_SIZE, stdin); if (input[0] == 'q') { break; } char *token = strtok(input, " "); while (token) { if (sscanf(token, "%lf", &num) == 1) { stack[++top] = num; } else { operator = token[0]; if (operator == '(') { operator_stack[++operator_top] = operator; } else if (operator == ')') { while (operator_top > -1 && operator_stack[operator_top] != '(') { double num2 = stack[top--]; double num1 = stack[top--]; char op = operator_stack[operator_top--]; stack[++top] = calculate(num1, num2, op); } operator_top--; } else if (operator == '+' || operator == '-') { while (operator_top > -1 && operator_stack[operator_top] != '(') { double num2 = stack[top--]; double num1 = stack[top--]; char op = operator_stack[operator_top--]; stack[++top] = calculate(num1, num2, op); } operator_stack[++operator_top] = operator; } else if (operator == '*' || operator == '/') { while (operator_top > -1 && operator_stack[operator_top] != '(' && operator_stack[operator_top] != '+' && operator_stack[operator_top] != '-') { double num2 = stack[top--]; double num1 = stack[top--]; char op = operator_stack[operator_top--]; stack[++top] = calculate(num1, num2, op); } operator_stack[++operator_top] = operator; } else if (operator == '^' || operator == 'r') { while (operator_top > -1 && operator_stack[operator_top] != '(' && operator_stack[operator_top] != '+' && operator_stack[operator_top] != '-' && operator_stack[operator_top] != '*' && operator_stack[operator_top] != '/') { double num2 = stack[top--]; double num1 = stack[top--]; char op = operator_stack[operator_top--]; stack[++top] = calculate(num1, num2, op); } operator_stack[++operator_top] = operator; } else { printf("Invalid input\n"); } } token = strtok(NULL, " "); } while (operator_top > -1) { double num2 = stack[top--]; double num1 = stack[top--]; char op = operator_stack[operator_top--]; stack[++top] = calculate(num1, num2, op); } result = stack[top]; printf("Result: %.2lf\n", result); clear_input_buffer(); } return 0; } ``` 这个计算器使用了两个栈,一个用来存储数字,一个用来存储操作符。在读入一个表达式之后,先将其转化为后缀表达式,然后再计算出结果。可以输入多个表达式,直到用户输入 "q" 退出程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值