//框架程序
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);
  }
}

解决方案 »

  1.   

    //运行程序
    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...
    当含有乘除运算 出现问题 结果不正确~
    还有当运算式中 出现刮号怎么处理~它的优先级~
    要求就只用集合类实现,用堆实现的不算