zoukankan      html  css  js  c++  java
  • 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/
    欢迎任何形式的转载,未经作者同意,请保留此段声明!

  • 相关阅读:
    C# 设计模式-抽象工厂模式
    C# 设计模式-工厂方法模式
    C# 设计模式-简单工厂模式
    C# 设计原则-迪米特法则(最少知识原则)
    C# 设计原则-接口隔离原则
    阻止右击事件并更改为自定义导航栏;
    今日头条滚动新闻版块特效
    抓包工具
    查看页面加载速度
    插件那点事
  • 原文地址:https://www.cnblogs.com/linlf03/p/2818257.html
Copyright © 2011-2022 走看看