• JAVA计算器算法实现


    import java.awt.BorderLayout;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;


    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;




    public class BorderJFrame extends JFrame {
    private JButton display;
    private JPanel jp;
    private boolean start;
    private String lastCommand;
    private double result;
    public BorderJFrame(){
    this.setLayout(new BorderLayout());
    this.result=0;
    this.start=true;
    this.lastCommand="=";
    this.display=new JButton("0");
    this.display.setEnabled(false);
    add(display, BorderLayout.NORTH);

    ActionListener insert=new InsertAction();
    ActionListener command=new CommandAction();
    int k=7;
    this.setSize(300, 200);
    jp=new JPanel();
    jp.setLayout(new GridLayout(4, 4));
    for(int i=1;i<=4;i++){
    for(int j=1;j<=4;j++){
    if(j==4){
    if(i==1){
    this.addButton("/",command);
    }else if(i==2){
    this.addButton("*",command);
    }else if(i==3){
    this.addButton("-",command);
    }
    }else if(i==4){
    this.addButton("0", insert);
    this.addButton(".",command);
    this.addButton("=",command);
    this.addButton("+",command);
    break;
    }else{
    this.addButton(String.valueOf(k), insert);
    k++;
    }
    }
    k=k-6;
    }
    this.add(jp,BorderLayout.CENTER);
    }

    private class CommandAction implements ActionListener{


    @Override
    public void actionPerformed(ActionEvent e) {
    String command=e.getActionCommand();
    if(start){
    if(command.equals("-")){
    display.setText(command);
    start=false;
    }else{
    lastCommand=command;
    }
    }else{
    calculate(Double.parseDouble(display.getText()));
    lastCommand=command;
    start=true;
    }
    }

    }

    private class InsertAction implements ActionListener{


    @Override
    public void actionPerformed(ActionEvent e) {
    String input=e.getActionCommand();
    if(start){
    display.setText("");
    start=false;
    }
    display.setText(display.getText()+input);
    }
    }

    private void addButton(String label,ActionListener listener){
    JButton button=new JButton(label);
    button.addActionListener(listener);
    this.jp.add(button);
    }

    public void calculate(double x){
    if(lastCommand.equals("+"))result+=x;
    else if(lastCommand.equals("-"))result-=x;
    else if(lastCommand.equals("*"))result*=x;
    else if(lastCommand.equals("/"))result/=x;
    else if(lastCommand.equals("="))result=x;
    this.display.setText(""+result);
    }
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    基础:按值传递引用类型,按引用传递引用类新 细说并沉淀
    抽象与具体
    EXTJS 零星记录 VS2008中EXTJS智能提示插件
    javascript 与 coffescript来回转换:http://js2coffee.org/
    一个冒号引发的血案
    我基本上差不多做过了coffescript所做的事
    javascript的闭包中保存的是引用与循环中事件函数处理
    用webstorm调试coffeescript
    coffeescript 下的构造函数中如何使用return语句?
    coffeescript中的forin和forof
  • 原文地址:https://www.cnblogs.com/liyuanjinglyj/p/4656595.html
Copyright © 2020-2023  润新知