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

首先,我认为编程之前需要先要搭建好整个程序一个基本并且合理的框架,只有这样后面的编程才会变得轻松!计算器我认为应该要划分为两个对象:1.界面类对象、2.计算类对象!

1.界面类中用到的一些对象的方法:

ActionEvent:getActionCommand()该方法可用于判断到底是哪一事件被触发。
   JTextField: setHorizontalAlignment()该方法可以设置文本对齐方式。                               setEditable()该方法可以设置文本框是否可编辑。

2.算法类其实才是核心(将代码附上):

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、付费专栏及课程。

余额充值