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
- java计算器
- Java计算器
- 计算器java
- java计算器
- java计算器
- Java计算器
- 计算器(JAVA)
- 计算器 java
- 计算器 java
- java计算器..
- java计算器
- java 计算器
- Java 计算器
- java计算器
- java计算器
- Java-计算器
- java 计算器
- java计算器
- iOS开发-简单制作九宫格拼图
- 适配
- Textbox TextMode="Password"数据不丢失
- Redis学习到实战(二)linux安装与从主
- 【转】Android最佳性能实践(四)——布局优化技巧
- Java计算器
- AsyncTask的问题与缺陷
- Android学习笔记day6
- 将mssql数据对应转换到mysql
- 首字母索引侧栏--漂亮且实用!!
- H2的存储子系统——MvStore
- ListView
- Android事件分发机制完全解析,带你从源码的角度彻底理解(下)
- Java发送电子邮件