Java计算器

CalculatorMainClass.java

public class CalculatorMainClass  {
      public static void main(String args[]) {
    	  CalculatorFrame Calculator=new CalculatorFrame();
    	  Calculator.setBounds(0,0,360,300);
    	  Calculator.setVisible(true);
      }
}
CalculatorFrame.java

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

import java.awt.Font;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

public class CalculatorFrame extends JFrame implements ActionListener {

	private static final long serialVersionUID = 1L;
	JButton CE=new JButton("CE");
	JTextField  TextField=new JTextField();
	String[] str={"7","8","9","/","4","5","6","*","1","2","3","-",".","0","=","+"}; 
	JButton[] Buttons=new JButton[str.length];
	StringBuffer strBuffer=new StringBuffer();
	public CalculatorFrame(){
		 super("计算器-屠柯");
		JPanel Panel=new JPanel(new BorderLayout());
		TextField.setFont(new Font("宋体", Font.PLAIN, 40));
		TextField.setEditable(false);
		TextField.setHorizontalAlignment(JTextField.RIGHT);//设置水平对其方式为右侧
		
		CE.setFont(new Font("宋体", Font.BOLD, 20));
		CE.setActionCommand("clear");
		CE.addActionListener(this);
		Panel.add("Center",TextField);
		Panel.add("East",CE);
		//把按钮加入画板
		JPanel Panel1 = new JPanel(new GridLayout(4, 4));	      
	       for (int i = 0; i < str.length; i++) {	    	   
	           Buttons[i] = new JButton(str[i]);
	           Buttons[i].setFont(new Font("宋体", Font.BOLD, 20));
	           Panel1.add(Buttons[i]);
	       }
	      //每个按钮设置监听器
	    for(int i=0;i<str.length;i++){
	    	Buttons[i].addActionListener(this);
	    	if(Buttons[i].getText().equals("=")){
	    		Buttons[i].setActionCommand("equal");
	    	}
	    	else {
	    		Buttons[i].setActionCommand("common");
	    	}
	    }
	    
	     getContentPane().setLayout(new BorderLayout());
	     getContentPane().add("North", Panel);
	     getContentPane().add("Center", Panel1);
	}
	
	
	
	@Override
	public void actionPerformed(ActionEvent e) {
		
		if(e.getActionCommand().equals("common")){
						
		    JButton b=(JButton)e.getSource();		    
		    strBuffer.append(b.getText());
		    TextField.setText(strBuffer.toString());
		    TextField.repaint();//刷新界面
		}
		else if(e.getActionCommand().equals("equal")){
			
			 DecimalFormat df = new DecimalFormat(",##0.00"); 
		      String s=df.format(ComputerNum(strBuffer.toString()));//将sum保留两位小数
			
			 TextField.setText(s);
			 strBuffer.delete(0,strBuffer.length());//strBuffer清空
			 TextField.repaint();
		}
		else if(e.getActionCommand().equals("clear")){
			strBuffer.delete(0,strBuffer.length());//strBuffer清空
			TextField.setText("0");
		}
		 	
	}
	//计算输入值
	public Double ComputerNum(String text){
		 // 计算内容按符号分割         
        List<String> numList = new ArrayList<String>();  
        int splitIndex = 0;  
        for(int i=0;i<text.length();i++){  
            char c = text.charAt(i);  
            if(c == '+'||c == '-'||c=='*'||c=='/'){  
                numList.add(text.substring(splitIndex, i));  
                numList.add(c+"");  
                splitIndex = i+1;  
            }  
        }  
        // 因为使用符号做判断,增加前一位和符号,所以最后一位数字不会在循环里处理  
        numList.add(text.substring(splitIndex, text.length()));  
          
       /* System.out.println("====分割后====");  
        for(int i=0;i<numList.size();i++){  
            System.out.println(i + " -> " + numList.get(i));  
        }  */
          
        // 先做乘除计算  
        List<String> list = new ArrayList<String>();  
        Double temp = null; // 用于做乘除计算临时变量  
        for(int i=1;i<numList.size();i+=2){ // 这里只循环运算符号  
            if("+".equals(numList.get(i))||"-".equals(numList.get(i))){  
                if(null != temp){ // 存在临时变量,说明前面进行过乘除计算  
                    list.add(temp.toString());  
                    temp = null;  
                } else {  
                    list.add(numList.get(i-1));  
                }  
                list.add(numList.get(i)); // 把符号加进去  
                if(i==numList.size()-2) { // 处理到最后时遇到直接处理  
   
                    list.add(numList.get(i+1));  
                 }  
            }else if("*".equals(numList.get(i))){  
                if(null == temp){  
                    temp = Double.parseDouble(numList.get(i-1)) * Double.parseDouble(numList.get(i+1));  
                }else{  
                    temp = temp * Integer.parseInt(numList.get(i+1));  
                }  
                if(i==numList.size()-2) { // 处理到最后时遇到直接处理  
                    list.add(temp.toString());  
                    temp = null;  
                }  
            }else if("/".equals(numList.get(i))){  
                if(null == temp){  
                    temp = Double.parseDouble(numList.get(i-1)) /Double.parseDouble(numList.get(i+1));  
                }else{  
                    temp = temp / Double.parseDouble(numList.get(i+1));  
                }  
                if(i==numList.size()-2) { // 处理到最后时遇到直接处理  
                    list.add(temp.toString());  
                    temp = null;  
                }  
            }  
        }  
        /*System.out.println("====乘除后====");  
        for(int i=0;i<list.size();i++){  
            System.out.println(i + " -> " + list.get(i));  
        }  */
          
        // 再做加减计算  
        Double sum = Double.parseDouble(list.get(0)); // 第一位不会在循环里处理  
        for(int i=1;i<list.size();i+=2){ // 这里只循环运算符号  
            if("+".equals(list.get(i))){  
                sum += Integer.parseInt(list.get(i+1));  
            }else if("-".equals(list.get(i))){  
                sum -= Integer.parseInt(list.get(i+1));  
            }  
        }  
           
        return sum;
          
	}

}



  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值