科学计算器的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 }

 

你可能感兴趣的:(java实现)