Java计算器

来源:互联网 发布:java 临时文件夹 编辑:程序博客网 时间:2024/04/29 03:14

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);}@Overridepublic 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 0
原创粉丝点击