简易的科学计算器的实现
---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 }