//框架程序
package 计算器;import java.awt.*;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import java.awt.Color;
import javax.swing.border.Border;
import java.awt.Dimension;
import javax.swing.border.EtchedBorder;
import java.awt.Rectangle;
import java.util.*;/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class CalculatorFrame
extends JFrame {
JPanel contentPane;
JTextField jTextField1 = new JTextField();
JPanel jPanel1 = new JPanel();
GridLayout gridLayout1 = new GridLayout(4, 4, 4, 4);
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();
JButton jButton4 = new JButton();
JButton jButton5 = new JButton();
JButton jButton6 = new JButton();
JButton jButton7 = new JButton();
JButton jButton8 = new JButton();
JButton jButton9 = new JButton();
JButton jButton10 = new JButton();
JButton jButton11 = new JButton();
JButton jButton12 = new JButton();
JButton jButton13 = new JButton();
JButton jButton14 = new JButton();
JButton jButton15 = new JButton();
JButton jButton16 = new JButton();
public CalculatorFrame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
} //为运算符、数字按钮创建事件
public class MyActionListenerNum
implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s = jTextField1.getText();
s += e.getActionCommand().toString();
jTextField1.setText(s);
}
} MyActionListenerNum a1 = new MyActionListenerNum(); //为=号创建事件
public class MyActionListenerOP
implements ActionListener {
public void actionPerformed(ActionEvent e) { //以数字为界,把运算符号划分出来按顺序放入op中
java.util.LinkedList<String> op = new LinkedList<String> (Arrays.asList(
jTextField1.getText().split("\\d+")));
//System.out.println("op中的元素:" + op.size());
//System.out.println(op);
//以不是A-Z、a-z、0-9的符号为界把要计算的数划分出来按顺序放入num中
LinkedList<String> num = new LinkedList<String> (
Arrays.asList(jTextField1.getText().split("\\W+")));
//System.out.println("num中的元素:" + num.size());
//System.out.println(num);
//当列如-5+2时 以\\W+划分 num中第一个元素为"",所以移除
if (num.get(0).equals("")) {
num.remove(0);
}
//System.out.println("处理1");
//System.out.println(num);
jTextField1.setText(op.get(0));
long result = 0; //例如5+2,则op中的第一个元素为"",移除
if (op.get(0).toString().equals("")) {
result = Long.parseLong(num.get(0));
op.remove(0);
} //例如-5+2 ,当第一个数是负数时,op中的第一个元素为("" + "-")
else if (op.get(0).toString().equals("-")) {
result = -1 * (Long.parseLong(num.get(0)));
op.remove(0);
}
//System.out.println("处理1");
//System.out.println(op);
//先乘除
for (int i = 0; i < op.size(); i++) {
if (op.get(i).equals("*")) {
int ji = Integer.parseInt(num.get(i))
* Integer.parseInt(num.get(i + 1));
op.remove(i);
num.set(i, new Integer(ji).toString());
num.remove(i + 1); }
if (op.get(i).equals("/")) {
int shang = Integer.parseInt(num.get(i)) /
Integer.parseInt(num.get(i + 1));
op.remove(i);
num.set(i, new Integer(shang).toString());
num.remove(i + 1); }
}
//System.out.println("处理2");
//System.out.println(op);
// System.out.println(num);
//后加减
if (op.isEmpty()) {
result = Long.parseLong(num.get(0));
}
else {
for (int i = 1; i < num.size(); i++) {
int numItem = Integer.parseInt(num.get(i));
if (op.get(i - 1).equals("+")) {
result += numItem;
}
if (op.get(i - 1).equals("-")) {
result -= numItem;
}
}
}
jTextField1.setText(Long.toString(result));
}
} MyActionListenerOP a2 = new MyActionListenerOP();
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(350, 270));
setTitle("简易计算器");
jTextField1.setBounds(new Rectangle(44, 23, 246, 27));
jPanel1.setBounds(new Rectangle(46, 64, 248, 169));
jPanel1.setLayout(gridLayout1);
jButton1.setText("7");
jButton1.addActionListener(a1);
jButton2.setText("9");
jButton2.addActionListener(a1);
jButton3.setText("=");
jButton3.addActionListener(a2);
jButton4.setText("+");
jButton4.addActionListener(a1);
jButton5.setText("8");
jButton5.addActionListener(a1);
jButton6.setText("Esc");
jButton6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jTextField1.setText("");
}
});
jButton7.setText("-");
jButton7.addActionListener(a1);
jButton8.setText("2");
jButton8.addActionListener(a1);
jButton9.setText("/");
jButton9.addActionListener(a1);
jButton10.setText("3");
jButton10.addActionListener(a1);
jButton11.setText("4");
jButton11.addActionListener(a1);
jButton12.setText("1");
jButton12.addActionListener(a1);
jButton13.setText("*");
jButton13.addActionListener(a1);
jButton14.setText("5");
jButton14.addActionListener(a1);
jButton15.setText("6");
jButton15.addActionListener(a1);
jButton16.setText("0");
jButton16.addActionListener(a1);
contentPane.add(jPanel1);
jPanel1.add(jButton1);
jPanel1.add(jButton5);
jPanel1.add(jButton2);
jPanel1.add(jButton9);
jPanel1.add(jButton11);
jPanel1.add(jButton14);
jPanel1.add(jButton15);
jPanel1.add(jButton13);
jPanel1.add(jButton12);
jPanel1.add(jButton8);
jPanel1.add(jButton10);
jPanel1.add(jButton7);
jPanel1.add(jButton16);
jPanel1.add(jButton6);
jPanel1.add(jButton3);
jPanel1.add(jButton4);
contentPane.add(jTextField1);
}
}
package 计算器;import java.awt.*;
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import java.awt.Color;
import javax.swing.border.Border;
import java.awt.Dimension;
import javax.swing.border.EtchedBorder;
import java.awt.Rectangle;
import java.util.*;/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class CalculatorFrame
extends JFrame {
JPanel contentPane;
JTextField jTextField1 = new JTextField();
JPanel jPanel1 = new JPanel();
GridLayout gridLayout1 = new GridLayout(4, 4, 4, 4);
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();
JButton jButton4 = new JButton();
JButton jButton5 = new JButton();
JButton jButton6 = new JButton();
JButton jButton7 = new JButton();
JButton jButton8 = new JButton();
JButton jButton9 = new JButton();
JButton jButton10 = new JButton();
JButton jButton11 = new JButton();
JButton jButton12 = new JButton();
JButton jButton13 = new JButton();
JButton jButton14 = new JButton();
JButton jButton15 = new JButton();
JButton jButton16 = new JButton();
public CalculatorFrame() {
try {
setDefaultCloseOperation(EXIT_ON_CLOSE);
jbInit();
}
catch (Exception exception) {
exception.printStackTrace();
}
} //为运算符、数字按钮创建事件
public class MyActionListenerNum
implements ActionListener {
public void actionPerformed(ActionEvent e) {
String s = jTextField1.getText();
s += e.getActionCommand().toString();
jTextField1.setText(s);
}
} MyActionListenerNum a1 = new MyActionListenerNum(); //为=号创建事件
public class MyActionListenerOP
implements ActionListener {
public void actionPerformed(ActionEvent e) { //以数字为界,把运算符号划分出来按顺序放入op中
java.util.LinkedList<String> op = new LinkedList<String> (Arrays.asList(
jTextField1.getText().split("\\d+")));
//System.out.println("op中的元素:" + op.size());
//System.out.println(op);
//以不是A-Z、a-z、0-9的符号为界把要计算的数划分出来按顺序放入num中
LinkedList<String> num = new LinkedList<String> (
Arrays.asList(jTextField1.getText().split("\\W+")));
//System.out.println("num中的元素:" + num.size());
//System.out.println(num);
//当列如-5+2时 以\\W+划分 num中第一个元素为"",所以移除
if (num.get(0).equals("")) {
num.remove(0);
}
//System.out.println("处理1");
//System.out.println(num);
jTextField1.setText(op.get(0));
long result = 0; //例如5+2,则op中的第一个元素为"",移除
if (op.get(0).toString().equals("")) {
result = Long.parseLong(num.get(0));
op.remove(0);
} //例如-5+2 ,当第一个数是负数时,op中的第一个元素为("" + "-")
else if (op.get(0).toString().equals("-")) {
result = -1 * (Long.parseLong(num.get(0)));
op.remove(0);
}
//System.out.println("处理1");
//System.out.println(op);
//先乘除
for (int i = 0; i < op.size(); i++) {
if (op.get(i).equals("*")) {
int ji = Integer.parseInt(num.get(i))
* Integer.parseInt(num.get(i + 1));
op.remove(i);
num.set(i, new Integer(ji).toString());
num.remove(i + 1); }
if (op.get(i).equals("/")) {
int shang = Integer.parseInt(num.get(i)) /
Integer.parseInt(num.get(i + 1));
op.remove(i);
num.set(i, new Integer(shang).toString());
num.remove(i + 1); }
}
//System.out.println("处理2");
//System.out.println(op);
// System.out.println(num);
//后加减
if (op.isEmpty()) {
result = Long.parseLong(num.get(0));
}
else {
for (int i = 1; i < num.size(); i++) {
int numItem = Integer.parseInt(num.get(i));
if (op.get(i - 1).equals("+")) {
result += numItem;
}
if (op.get(i - 1).equals("-")) {
result -= numItem;
}
}
}
jTextField1.setText(Long.toString(result));
}
} MyActionListenerOP a2 = new MyActionListenerOP();
/**
* Component initialization.
*
* @throws java.lang.Exception
*/
private void jbInit() throws Exception {
contentPane = (JPanel) getContentPane();
contentPane.setLayout(null);
setSize(new Dimension(350, 270));
setTitle("简易计算器");
jTextField1.setBounds(new Rectangle(44, 23, 246, 27));
jPanel1.setBounds(new Rectangle(46, 64, 248, 169));
jPanel1.setLayout(gridLayout1);
jButton1.setText("7");
jButton1.addActionListener(a1);
jButton2.setText("9");
jButton2.addActionListener(a1);
jButton3.setText("=");
jButton3.addActionListener(a2);
jButton4.setText("+");
jButton4.addActionListener(a1);
jButton5.setText("8");
jButton5.addActionListener(a1);
jButton6.setText("Esc");
jButton6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
jTextField1.setText("");
}
});
jButton7.setText("-");
jButton7.addActionListener(a1);
jButton8.setText("2");
jButton8.addActionListener(a1);
jButton9.setText("/");
jButton9.addActionListener(a1);
jButton10.setText("3");
jButton10.addActionListener(a1);
jButton11.setText("4");
jButton11.addActionListener(a1);
jButton12.setText("1");
jButton12.addActionListener(a1);
jButton13.setText("*");
jButton13.addActionListener(a1);
jButton14.setText("5");
jButton14.addActionListener(a1);
jButton15.setText("6");
jButton15.addActionListener(a1);
jButton16.setText("0");
jButton16.addActionListener(a1);
contentPane.add(jPanel1);
jPanel1.add(jButton1);
jPanel1.add(jButton5);
jPanel1.add(jButton2);
jPanel1.add(jButton9);
jPanel1.add(jButton11);
jPanel1.add(jButton14);
jPanel1.add(jButton15);
jPanel1.add(jButton13);
jPanel1.add(jButton12);
jPanel1.add(jButton8);
jPanel1.add(jButton10);
jPanel1.add(jButton7);
jPanel1.add(jButton16);
jPanel1.add(jButton6);
jPanel1.add(jButton3);
jPanel1.add(jButton4);
contentPane.add(jTextField1);
}
}
package 计算器;import java.awt.Toolkit;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.Dimension;/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2007</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Calculator {
boolean packFrame = false; /**
* Construct and show the application.
*/
public Calculator() {
CalculatorFrame frame = new CalculatorFrame();
// Validate frames that have preset sizes
// Pack frames that have useful preferred size info, e.g. from their layout
if (packFrame) {
frame.pack();
}
else {
frame.validate();
} // Center the window
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation( (screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
} /**
* Application entry point.
*
* @param args String[]
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception exception) {
exception.printStackTrace();
} new Calculator();
}
});
}
}
进行加减运算没问题例如:
5+4+3+2+1-6-4...
当含有乘除运算 出现问题 结果不正确~
还有当运算式中 出现刮号怎么处理~它的优先级~
要求就只用集合类实现,用堆实现的不算