使用Swing编写win7简易计算器4——双目运算符

        到第四天,来讲一下各双目运算符的实现。双目运算符的特点运算参数有两个,先输入一个参数,点击双目运算符后,再输入第二个参数,点击等号或其它运算符会先将之前的结果算出来。这就需要专门的变量存储第一个参数和运算符,在输入第二个参数后进行计算(另外,测试了一下,win7的简易计算器里不考虑四则运算的优先级问题,都是从左到右的运算顺序),我在Operation类里增加了一个名为stack的LinkedList变量来存储第一个参数和运算符,当点击双目运算符时,如果stack为空,则将数据及符号存入stack;否则等同于点击等号,计算结果。另外,C的作用就是要将stack清空,再输出0。

       先介绍一下各双目运算符的功能:

       1. +、-、*、/:四则运算。

       2. %:这个运算符比较少见,查了一下才知道这个符号的功能,是在进行加减乘除运算的途中(输入了第二个参数后,按等号之前),可以将第一个参数与第二个参数相乘,再除以100,这个运算的使用无需点击等号。例如,输入7+8之后点击%,则会自动计算7*8/100,输出0.56,如果没有输入两个参数,则输出0。输出的结果仍可继续进行加法运算。

       这里必须先特别提一提等号按钮的响应处理。经过多次测试,win7计算器的等号按钮是这样实现的:

       1. 如果stack为空,则等号按钮返回的是显示区的内容;

       2. 如果stack不为空,则点击等号后,将stack中存储的数和符号取出,与第二个参数进行相应运算,结束后返回结果;

       3. 如果点击了存储计算且stack为空,每点一次等号则将文本区的数据加1。

       根据这些要求,我编写了EqualAction()方法,代码如下:

          /**

           * 点击等号的处理

           *

           *@param num

           *            计算数

           *@return 是简单符号则处理并返回true,否则返回false

           */

          public static String equalAction(double num){

              if (stack.size() > 1) {

                 char op =stack.get(1).toString().charAt(0);

                 double operator =Double.parseDouble((String) stack.get(0));

                 isResult = true;

                 empty();

                 switch (op) {

                  case'+':

                     return resultFormat(operator +num);

                 case '-':

                     return resultFormat(operator -num);

                 case '*':

                     return resultFormat(operator *num);

                 case '/':

                     return resultFormat(operator /num);

                 default:

                     return "";

                 }

             } else if (MOperation.isMemoryFilled) {

                 return resultFormat(num + 1);

              } else {

                 return resultFormat(num);

              }

          }

       然后为双目运算符编写addStack()函数,实现上面所说的双目运算符功能,最后调用即可。

          /**

           * 添加堆栈

           *

           * @paramop

           *            运算符

           * @paramtext

           *            输入文本

           * @return

           */

          public static String addStack(String op,String text) {

              isResult = true;

              if (stack.size() == 0) {

                 stack.add(text);

                 stack.add(op);

                 return text;

              } else {

                 String res = equalAction(Double.parseDouble(text));

                 stack.add(res);

                 stack.add(op);

                 return res;

              }

          }

 

       /**

           * 双目运算符的处理

           *

           *@param text

           *            输入文本

           *@param index

           *            序列号码

           *@return 是双目运算符则处理并返回结果,否则返回空字符串

           */

          public static String operationAction(Stringtext, int index) {

              double digit;

              switch (index) {

              case Button.PLUS:

                 return addStack("+", text);

              case Button.MINUS:

                 return addStack("-", text);

              case Button.MULTIPLY:

                 return addStack("*", text);

              case Button.DIVIDE:

                 return addStack("/", text);

              case Button.PERCENT:

                 if (stack.size() > 0) {

                     isResult = true;

                     returnresultFormat(Double.parseDouble((String) stack.get(0))

                            * Double.parseDouble(text)/ 100);

                 } else {

                     return "0";

                 }

              case Button.EQUAL:

                 returnequalAction(Double.parseDouble(text));

              default:

                 return "";

              }

          }

       双目运算符的处理也到此完成。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值