Java 计算器实现

简介:

1、加减乘除操作

public  class  MyMath {
     public  static  final  int  DEFAULT_SCALE = 20 ;
     
     public  static  double  add( double  num1, double  num2) {
         
         BigDecimal first = getBigDecimal(num1);
         BigDecimal second = getBigDecimal(num2);
         return  first.add(second).doubleValue();
     }
     
     public  static  double  substract( double  num1, double  num2) {
         
         BigDecimal first = getBigDecimal(num1);
         BigDecimal second = getBigDecimal(num2);
         return  first.subtract(second).doubleValue();
     }
     
     public  static  double  multiply( double  num1, double  num2) {
         
         BigDecimal first = getBigDecimal(num1);
         BigDecimal second = getBigDecimal(num2);
         return  first.multiply(second).doubleValue();
     }
     
     public  static  double  divide( double  num1, double  num2) {
         
         BigDecimal first = getBigDecimal(num1);
         BigDecimal second = getBigDecimal(num2);
         return  first.divide(second,DEFAULT_SCALE, BigDecimal.ROUND_HALF_UP).doubleValue();
     }
     
     private  static  BigDecimal getBigDecimal( double  num)
     {
         return  new  BigDecimal(num);
     }
 
}

 

2、UI

public  class  CalFrame extends  JFrame {
 
     /**
      *
      */
     private  static  final  long  serialVersionUID = 1L;
     private  TextField textField;
     private  final  int  Frame_Width = 360 ;
     private  final  int  Frame_Height = 250 ;
     private  CalService service = new  CalService();
     
     private  String[] mOpStrings = { "MC" , "MR" , "MS" , "M+" };
     private  String[] nOp = { "7" , "8" , "9" , "/" , "sqrt" , "4" , "5" , "6" , "*" ,
             "%" , "1" , "2" , "3" , "-" , "1/x" , "0" , "+/-" , "." , "+" , "="  };
     private  String[] rOp = { "Back" , "CE" , "C"  };
     
     public  CalFrame(){
         super ();
         initialize();
     }
 
     private   void  initialize() {
         this .setTitle( "我的计算器" );
         this .setResizable( false );
         JPanel panel = new  JPanel();
         
         textField = new  TextField( "0" );
         textField.setBackground(Color.white);
         textField.setEditable( false );
         
         panel.setLayout( new  BorderLayout( 10 , 1 ));
         panel.add(textField, BorderLayout.NORTH);
         
         panel.setPreferredSize( new  DimensionUIResource(Frame_Width, Frame_Height));
         
         JPanel panel1 = new  JPanel();
         panel1.setLayout( new  GridLayout( 5 , 1 , 0 , 5 ));
         JButton[] mButton = new  JButton[mOpStrings.length];
         for  ( int  i = 0 ; i < this .mOpStrings.length; i++) {
             JButton b = new  JButton( this .mOpStrings[i]);
             b.addActionListener( new  ActionListener() {
                 
                 @Override
                 public  void  actionPerformed(ActionEvent arg0) {
                     // TODO Auto-generated method stub
                     String cmdString = arg0.getActionCommand();
                     String result = null ;
                     
                     try  {
                           result = service.callMethod(cmdString, textField.getText());
                     } catch  (Exception e) {
                         // TODO: handle exception
                         System.out.println(e.getMessage());
                     }
                     
                     if  (cmdString.indexOf( "MC" ) == 0 ) {
                         
                     }
                     
                     if  (result != null ) {
                         textField.setText(result);
                     }
                     
                 }
             });
             b.setBackground(Color.red);
             mButton[i] = b;
         }  
     
 
         for  (JButton b : mButton) {
             panel1.add(b);
         }
         
         /////////////////////////////////////////////////////////
         Panel panel2 = new  Panel();
         panel2.setLayout( new  BorderLayout( 1 , 5 ));
         
         Panel panel21 = new  Panel();   
         JButton[] result = new  JButton[rOp.length];
         for  ( int  i = 0 ; i < this .rOp.length; i++) {
             JButton b = new  JButton( this .rOp[i]);
             b.addActionListener( new  ActionListener() {
                 
                 @Override
                 public  void  actionPerformed(ActionEvent arg0) {
                     // TODO Auto-generated method stub
                     
                 }
             });
             b.setBackground(Color.red);
             result[i] = b;
         }
         
         panel21.setLayout( new  GridLayout( 1 , 3 , 3 , 3 ));
         for  (JButton button : result) {
             panel21.add(button);
         }
         
         Panel panel22 = new  Panel();
         panel22.setLayout( new  GridLayout( 4 , 5 , 3 , 5 ));
         JButton[] result2 = new  JButton[nOp.length];
         String[] redButton = { "/" , "*" , "-" , "+" , "="  };
         for  ( int  i = 0 ; i < this .nOp.length; i++) {
             JButton b2 = new  JButton( this .nOp[i]);
             b2.addActionListener( new  ActionListener() {
                 
                 @Override
                 public  void  actionPerformed(ActionEvent arg0) {
                     // TODO Auto-generated method stub
                     
                 }
             });
             
             Arrays.sort(redButton);
             if  (Arrays.binarySearch(redButton, nOp[i]) >= 0 ) {
                 b2.setForeground(Color.red);
             }
             else  {
                 b2.setForeground(Color.blue);
             }
             result2[i] = b2;
         }
         for  (JButton button : result2) {
             panel22.add(button);
         }
         
         
         
         panel2.add(panel21, BorderLayout.NORTH);
         panel2.add(panel22,BorderLayout.CENTER);
         
         panel.add(panel1, BorderLayout.WEST);
         panel.add(panel2, BorderLayout.CENTER);
 
         this .add(panel);
     }
}

  

3、业务类

public  class  CalService {
     private  String firstNum = null ;
     private  String secondNum = null ;
     private  String numString = "0123456789." ;
     private  String opString = "+-*/" ;
     
     public  String callMethod(String cmd, String text) throws  Exception  {
         if  (cmd.equals( "C" )) {
             return  clearAll();
         } else  if  (cmd.equals( "CE" )) {
             return  clear(text);
         } else  if  (cmd.equals( "Back" )) {
             return  backSpace(text);
         } else  if  (numString.indexOf(cmd) != - 1 ) {
             return  catNum(cmd, text);
         } else  if  (opString.indexOf(cmd) != - 1 ) {
             return  setOp(cmd, text);
         } else  if  (cmd.equals( "=" )) {
             return  cal(text, false );
         } else  if  (cmd.equals( "+/-" )) {
             return  setNegative(text);
         } else  if  (cmd.equals( "1/x" )) {
             return  setReciprocal(text);
         } else  if  (cmd.equals( "sqrt" )) {
             return  sqrt(text);
         } else  if  (cmd.equals( "%" )) {
             return  cal(text, true );
         } else  {
             return  mCmd(cmd, text);
         }
     }
 
     private  String backSpace(String text) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String catNum(String cmd, String text) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String setOp(String cmd, String text) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String setNegative(String text) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String setReciprocal(String text) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String sqrt(String text) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String cal(String text, boolean  b) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String mCmd(String cmd, String text) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String clear(String text) {
         // TODO Auto-generated method stub
         return  null ;
     }
 
     private  String clearAll() {
         // TODO Auto-generated method stub
         this .firstNum = "0" ;
         this .secondNum = null ;
         return  this .firstNum;
     }
}

  

4、Main类

public  static  void  main(String[] args) {
     // TODO Auto-generated method stub
     
     CalFrame frame = new  CalFrame();
     frame.pack();
     frame.setVisible( true );
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}

 


本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2012/12/14/2818257.html,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
小程序 Java 知识图谱
Java 学习笔记 —— BMI & BMR 计算器
这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。
逆波兰计算器(java)
逆波兰计算器(java)
100 0
|
Java
简单的 Java 计算器示例
【5月更文挑战第1天】这是一个Java计算器程序,接收用户输入的两个数字和一个运算符(+,-,*,/),通过`Scanner`获取输入,使用`switch`进行计算。当运算符为除法时,检查除数是否为0,防止除零错误。最后,它打印出计算结果。
229 0
|
Java 数据库连接
Java混合计算器以及界面切换
Java混合计算器以及界面切换
114 0
|
Java
Java实现简易计算器
Java实现简易计算器
722 5
|
数据可视化 小程序 Java
【Java】——实现可视化加减乘除计算器
【Java】——实现可视化加减乘除计算器
【Java】——实现可视化加减乘除计算器
【Java每日一题】— —第十三题:实现简单的计算器
【Java每日一题】— —第十三题:实现简单的计算器
|
Java
用Java编写一个代码实现计算器功能
【1月更文挑战第17天】用Java编写一个代码实现计算器功能
199 0
|
Python Java Go
Java每日一练(20230416) 三数之和、基本计算器、通配符匹配
Java每日一练(20230416) 三数之和、基本计算器、通配符匹配
196 0
Java每日一练(20230416) 三数之和、基本计算器、通配符匹配
|
Python Java 算法
Java每日一练(20230415) 扰乱字符串、单词拆分、模拟计算器
Java每日一练(20230415) 扰乱字符串、单词拆分、模拟计算器
105 0
Java每日一练(20230415) 扰乱字符串、单词拆分、模拟计算器