java 编码 正弦计算器_Java代码实现计算器加减乘除简易功能

package test;

import javax.swing.*;

import java.awt.*;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.util.HashMap;

import java.util.Stack;

/**

* Created by zxx on 2020/10/15.

*/

public class Calculator extends JFrame{

private Stack operandStack= new Stack<>();

private Stack operatorStack = new Stack<>();

private Calculator(){

setTitle("计算器");

setSize(266,340);

//setSize(400,540);

Container c=getContentPane();

c.setLayout(null);

JTextArea jt=new JTextArea(100,100);

jt.setFont(new Font("Aria",Font.BOLD,32));

jt.setLineWrap(true);

JScrollPane sp=new JScrollPane(jt);

jt.setCaretPosition(jt.getDocument().getLength());

sp.setBounds(0,0,250,100);

c.add(sp);

JPanel p=new JPanel();

p.setLayout(new GridLayout(5,4,0,0));

p.setBounds(0,100,250,200);

String[] num={"(",")","AC","/","7","8","9","*","4","5","6","-","1","2","3","+","0",".","DEL","="};

JButton[] jb=new JButton[20];

for(int i=0;i<20;i ++ ){

jb[i]=new JButton(num[i]);

p.add(jb[i]);

}

c.add(p);

for(int i=0;i<18;i ++){

if(i!=2){

final int j=i;

jb[i].addActionListener(e-> jt.append(num[j]));

}

}

jb[2].addActionListener(e->{

jt.setText("");

operandStack.clear();

operatorStack.clear();

});

jb[18].addActionListener(e->{

try{

jt.setText(jt.getText().substring(0,jt.getText().length()-1));

}catch(Exception ignored) { }//忽略这个异常 IDEA就是好用!!!

});

jb[19].addActionListener(e->{

try{

double x= calculate(jt.getText()+ "#");

jt.setText("");

jt.append(String.valueOf(x));

}catch(Exception ex){

if(ex.getMessage()==null)

jt.setText("ERROR!");

else

jt.setText(ex.getMessage());

}

});

//禁止文本域的enter换行

KeyStroke enter = KeyStroke.getKeyStroke("ENTER");

jt.getInputMap().put(enter, "none");

this.getRootPane().setDefaultButton(jb[19]);

c.addKeyListener(new KeyAdapter() {

@Override

public void keyTyped(KeyEvent e)

{

}

public void keyPressed(KeyEvent e)//键盘按键监听

{

char label=e.getKeyChar();

String k=String.valueOf(label);

if(label==KeyEvent.VK_ENTER)

{

calculate();

}

else if(label==KeyEvent.VK_BACK_SPACE)

{

String s = jt.getText();

if(s!=null)

{

calculate();//调用定义的处理←方法

}else

{

jt.setText(s);

}

}

else

{

calculate(k);//按下数字和运算符号的叠加

}

}

public void keyReleased(KeyEvent e)

{

}

});

setVisible(true);

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

}

private void calculate(){

String b = operatorStack.pop();

double c = operandStack.pop();

double d = operandStack.pop();

double e;

if (b.equals("+")) {

e = d + c;

operandStack.push(e);

}

if (b.equals("-")) {

e = d - c;

operandStack.push(e);

}

if (b.equals("*")) {

e = d * c;

operandStack.push(e);

}

if (b.equals("/")) {

if(c==0)

throw new ArithmeticException("DivideByZero!");//不可修改为Exception

// Exception的异常是必须处理的,是受控异常;而ArithmeticException 不是必须处理的 ,受控异常必须强制处理

e = d / c;

operandStack.push(e);

}

}

private Double calculate(String text){

HashMap precede=new HashMap<>();

precede.put("(",0);

precede.put(")",0);

precede.put("/",2);

precede.put("*",2);

precede.put("-",1);

precede.put("+",1);

precede.put("#",0);

operatorStack.push("#");

int flag=0;

for(int i=0;i

String a=String.valueOf(text.charAt(i));

if(!a.matches("[0-9.]")){

if(flag!=i)

operandStack.push(Double.parseDouble(text.substring(flag,i)));

flag=i+ 1;

while(!(a.equals("#")&&operatorStack.peek().equals("#"))){

if(precede.get(a)>precede.get(operatorStack.peek())||a.equals("(")){

operatorStack.push(a);

break;

}else {

if(a.equals(")")) {

while(!operatorStack.peek().equals("("))

calculate();

operatorStack.pop();

break;

}

calculate();

}

}

}

}

return(operandStack.pop());

}

public static void main(String[] args){

new Calculator();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值