用java编写计算器的难点_用java编写了一个计算器,阐述下编程过程遇到的难点?...

这篇博客详细介绍了使用Java编程实现计算器过程中遇到的主要难点,包括数字与运算符的处理逻辑、加减乘除的运算实现以及异常情况的处理。通过创建CountersAlgorithm类,实现了数字按钮、运算符按钮和特殊功能按钮的事件处理,确保计算器的正确运行。
摘要由CSDN通过智能技术生成

package com.countersAlgorithm; import java.awt.event.ActionEvent; import java.math.BigDecimal; import javax.swing.JButton; /* CountersAlgorithm类为计算器计算核心逻辑,为处理计算问题而生  *   */ import javax.swing.JOptionPane; public class CountersAlgorithm { public BigDecimal number1,number2,number1_2;//用于将String转换成十进制数, //number1_2为运算后的结果。 public String displayText="0";//用来显示的字符串 public static final  int LENGH = 20;//规定的输入的长度  private boolean firstPoint = true; public boolean operationFirst = true; private boolean numStart = false;//判断数字键是否被按下 private String myFlag = null;//弄一个标记用来记忆等于号之前的发生了什么运算 //数字按钮事件处理*****************************功能模块(一) public void numberButtonAction(String flagNum){ if(displayText.equals("0")){ if(flagNum.equals("0")) displayText = flagNum; else if(flagNum.equals(".")&&firstPoint){ displayText += flagNum; firstPoint = false; } else if("123456789".indexOf(flagNum)!=-1){ displayText = flagNum; } } else{ if(flagNum.equals(".")&&firstPoint){ displayText += flagNum; firstPoint = false; } else if("0123456789".indexOf(flagNum)!=-1){ displayText += flagNum; } } numStart = true; } //运算符按钮事件处理**********************************功能模块(二) public void operationButtonAction(String flagOpe){ if(!flagOpe.equals("=")){//首先判断是否输入的是"="运算符 myFlag = flagOpe;//如果不是"="运算符再做标记 if(flagOpe.equals("+")){//按下的是加号 if(operationFirst) funtion();//funtion()方法提供为number1赋值的功能 else funAdd(); } else if(flagOpe.equals("-")){//按下的是减号 if(operationFirst) funtion(); else funSub(); } else if(flagOpe.equals("*")){//按下的是乘号 if(operationFirst) funtion(); else funMul(); } else if(flagOpe.equals("/")){//按下的是除号 if(operationFirst) funtion(); else funDiv(); } } else{ //如果为等号时 if(myFlag.equals("+")){ funAdd(); } else if(myFlag.equals("-")){ funSub(); } else if(myFlag.equals("*")){ funMul(); } else if(myFlag.equals("/")){ funDiv(); } } numStart = false;//将数字按钮的标记置为假 } //操作符按钮事件处理**************************************功能模块(三) public void funtionButtonAction(String flagFun){ if(flagFun.equals("MC")){ //如果按下"MC"清零键,就将各变量回归初始化 displayText = "0"; number1 = null; number2 = null; operationFirst = true; firstPoint = true; numStart = true; } else if(flagFun.equals("Del")){ /*如果按下的是"Del"键就是获取 *原displayText长度不断减一的子字符串一直到长度为零。*/ if(!displayText.equals("0")){ if(displayText.length()> 0) displayText = displayText.substring(0,displayText.length()-1); } } } //************************************************为功能模块(二)服务的子模块 //为number1赋初值的方法 private void funtion(){ number1 = new BigDecimal(displayText); displayText = "0"; operationFirst = false; } //求加运算 private void funAdd(){ number2 = new BigDecimal(displayText); number1 = number1.add(number2); displayText = "0"; } //求差运算 private void funSub(){ number2 = new BigDecimal(displayText); number1 = number1.subtract(number2); displayText = "0"; } //求积运算 private void funMul(){ /*乘法需要判断dislayText是否为0,因为在乘法进行之前如果出现了其他运算的话, displayText会被置为"0",接着就会影响number2的值,这样就会影响number1的值。*/ if(!displayText.equals("0")){ number2 = new BigDecimal(displayText); number1 = number1.multiply(number2); displayText = "0"; } else{ if(numStart)//输出结果前先要判断一下数字键是否被按下过,如果为真才输出结果 number1 = number1.multiply(new BigDecimal("0")); } } //求商运算 private void funDiv(){ if(!displayText.equals("0")){ number2 = new BigDecimal(displayText); try{ number1 = number1.divide(number2); } catch(ArithmeticException e){//除法运算时可能会出现算数异常 JOptionPane.showMessageDialog(null,"无限循环:"+e.toString() ,"错误提示",JOptionPane.OK_OPTION); } displayText = "0"; } else{ //判断用户是否输入并且是否将除数输入为零 if(numStart&&displayText.equals("0")){ JOptionPane.showMessageDialog(null,"他妈的 ,小学没学好啊?除数不能为零!!!", "错误提示!!!",JOptionPane.OK_OPTION); } } } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值