• 科学计算器的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 }
  • 相关阅读:
    Android虚拟、实体键盘不能同时使用?
    libwebsockets 运行问题
    Qt TabWidget QTabBar 宽高设置
    I.MX6 recovery mode hacking
    libwebsockets libwebsockets-webserver.c hacking
    MySQL(六)常用语法和数据类型
    MySQL(五)汇总和分组数据
    MySQL(四)字段及常用函数
    MySQL(三)用正则表达式搜索
    MySQL(二)数据的检索和过滤
  • 原文地址:https://www.cnblogs.com/jeff-wgc/p/4485529.html
Copyright © 2020-2023  润新知