科学计算器的Java实现

简易的科学计算器的实现

---Java版

  1 import javax.swing.*;//新的窗口组件包
  2 import java.awt.*;
  3 import java.awt.event.*;
  4 public class rf  implements ActionListener
  5 {   JFrame jf=new JFrame();
  6      boolean dotExist, operated, equaled; // 帮助运算的布尔变量
  7      double result; // 目前的结果
  8     char lastOperator; // 表示上一运算符
  9      JTextField jtf; // 显示栏
 10     JButton dot, plus, minus, multi, div, sqrt, equal, change, clear,quyu; // 运算符
 11     JButton[] numbers;
 12     Panel p=new Panel();
 13     
 14     public rf()    // 构造者
 15     {  
 16        jf.setTitle("简易计算器");
 17         // 初始化变量
 18         dotExist = false; // 表示当前的数是否有小数点
 19         operated = false; // 表示任意运算符是否被按下
 20         equaled = false; // 表示等号是否被按下
 21         result = 0;
 22         lastOperator = '?';
 23         // 初始化窗口变量
 24         jtf = new JTextField("0");
 25         jtf.setEditable(false); //设置文本框的可编辑性
 26         jf.setSize(300,250);
 27         jf.setVisible(true);
 28         numbers = new JButton[10];
 29         for (int i = 0; i < 10; i++)
 30           numbers[i] = new JButton("" + i);  //从0到9,,10个数字按钮
 31         dot = new JButton(".");
 32         plus = new JButton("+");
 33         minus = new JButton("-");
 34         
 35         multi = new JButton("*");
 36         div = new JButton("/");
 37         sqrt = new JButton("");
 38         equal = new JButton("=");
 39         change= new JButton("±");
 40         clear = new JButton("NC");   //复位
 41         quyu=new JButton("%");
 42         
 43         p.setLayout(new GridLayout(5,4)); //绘制一个5行4列的布局管理器
 44         p.add(numbers[1]);       //把各个按钮添加到布局管理器中
 45         p.add(numbers[2]);
 46         p.add(numbers[3]);
 47         p.add(plus);
 48         p.add(numbers[4]);
 49         p.add(numbers[5]);
 50         p.add(numbers[6]);
 51         p.add(minus);
 52         p.add(numbers[7]);
 53         p.add(numbers[8]);
 54         p.add(numbers[9]);
 55         p.add(multi);
 56         p.add(dot);
 57         p.add(numbers[0]);
 58         p.add(sqrt);
 59         p.add(div);
 60         p.add(quyu);
 61         p.add(change);
 62         p.add(clear);
 63         p.add(equal);
 64         jf.add(jtf,BorderLayout.NORTH);  //把显示框添加到北区也就是最上边
 65         jf.add(p,BorderLayout.CENTER);   //把各个按钮放到中区
 66         numbers[0].addActionListener(this);  //鼠标事件监听器
 67         numbers[1].addActionListener(this);
 68         numbers[2].addActionListener(this);
 69         numbers[3].addActionListener(this);
 70         plus.addActionListener(this);
 71         numbers[4].addActionListener(this);
 72         numbers[5].addActionListener(this);
 73         numbers[6].addActionListener(this);
 74         minus.addActionListener(this);
 75         numbers[7].addActionListener(this);
 76         numbers[8].addActionListener(this);
 77         numbers[9].addActionListener(this);
 78         multi.addActionListener(this);
 79         dot.addActionListener(this);
 80         sqrt.addActionListener(this);
 81         div.addActionListener(this);
 82         equal.addActionListener(this);
 83         change.addActionListener(this);
 84         clear.addActionListener(this);
 85         quyu.addActionListener(this);
 86         
 87     }
 88     // 对按钮进行反应的方法
 89     public void actionPerformed(ActionEvent e)
 90     {
 91         JButton btn = (JButton)e.getSource();
 92         if (btn == clear)
 93         {
 94             jtf.setText("0");
 95             dotExist = false;      //小数点、运算符、等号、结果、上一个运算符
 96           operated = false; 
 97         equaled = false; 
 98             result = 0;
 99             lastOperator = '?';
100         }
101         else if (btn == equal)
102         {
103             operate('=');
104             equaled = true;
105         }
106         else if (btn == plus)
107         {
108             operate('+');
109             equaled = false;
110         }
111         else if (btn == minus)
112         {
113             operate('-');
114             equaled = false;
115         }
116         else if (btn == multi)
117         {
118             operate('*');
119             equaled = false;
120         }
121         else if (btn == div)
122         {
123             operate('/');
124             equaled = false;
125         }
126         else if (btn==quyu){
127          operate('%');
128          equaled=false;
129         }
130         else if (btn == change)   //正负号
131         {
132             operate('±');
133             operate('=');
134             equaled = true;
135         }
136         else if (btn == sqrt)
137         {
138             operate('');
139             operate('=');
140             equaled = true;
141         }
142         else
143         {
144             if (equaled)
145               result = 0;
146             for (int i = 0; i < 10; i++)
147               if (btn == numbers[i])
148               {
149                   if (jtf.getText().equals("0"))
150                     jtf.setText("" + i);
151                   else if(! operated)    //如果按下的不是运算符
152                     jtf.setText(jtf.getText() + i);
153                   else
154                   {
155                       jtf.setText("" + i);
156                       operated = false;
157                   }
158               }
159             if (btn == dot && ! dotExist)
160             {
161                 jtf.setText(jtf.getText() + ".");
162                
163             }
164         }
165     }
166     // 进行运算的方法
167     private void operate(char operator)
168     {
169         double currentNumber = Double.valueOf(jtf.getText()).doubleValue();
170         if (lastOperator == '?')
171           result = currentNumber;
172         else if (lastOperator == '+')
173          result += currentNumber;
174         else if (lastOperator == '-')
175          result -= currentNumber;
176         else if (lastOperator == '*')
177          result *= currentNumber;
178         else if (lastOperator == '/')
179          result /= currentNumber;
180         else if(lastOperator=='%')
181          result %=currentNumber;
182         else if (lastOperator == '±')
183          result *= -1;
184         else if (lastOperator == '')
185          result = Math.sqrt(currentNumber);
186         else if (lastOperator == '=' && equaled)
187          result = currentNumber;
188         
189         jtf.setText("" + result);
190         operated = true;
191         lastOperator = operator;
192     }
193 
194 public static void main(String[] args)
195     {new rf();   }      //创建了一个rf的实例
196 }
原文地址:https://www.cnblogs.com/jeff-wgc/p/4485529.html