1. 程式人生 > >用java語言製作一個簡易的計算器

用java語言製作一個簡易的計算器

import javax.swing.JFrame;//匯入窗體型別Jframe
import java.awt.FlowLayout;//匯入流式佈局
import javax.swing.JButton;//匯入按鈕型別
import javax.swing.JPanel;//匯入面板佈局
import javax.swing.JTextField;
import javax.swing.JOptionPane;//匯入訊息框類
import java.awt.GridLayout;//匯入網格佈局
import java.awt.BorderLayout;//匯入邊框佈局
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;//匯入監聽介面
public class Counter {
/**
* 計算器 :
*/
public static void main(String[] args) {
// 建立窗體
JFrame frm = new JFrame(“計算器”);
// 窗體北邊放置單行文字框
JTextField txtNum = new JTextField(“0.0”);
frm.add(txtNum, BorderLayout.NORTH);// 通過邊框佈局,將文字框物件放置窗體的北側
GridLayout layout = new GridLayout(5, 4);
JPanel panel = new JPanel();
panel.setLayout(layout);

    // 建立監聽物件(耳朵)
    ActionListener listener = new ActionListener() {
        String op = ""; // 本次運算子
        String upOp = "",oldOp=""; // 上一次運算子,  oldOp儲存的舊運算子
        double sum = 0,oldSum=0; // 四則混合運算累計結果,oldSum 儲存舊的運算結果
        boolean isOne = true, isOk = true;// 是否是第一個運算數
        String strNum = ""; // 做0~9數字累加的
        double n = 0.0; // 運算數 
        @Override
        public void actionPerformed(ActionEvent e) {
            String val = e.getActionCommand(); // 獲取當前點選者的顯示文字 
            // 判斷點選的按鈕顯示文字是0~9的字串嗎?
            if ("0".equals(val) || "1".equals(val) || "2".equals(val) || "3".equals(val) || "4".equals(val)
                    || "5".equals(val) || "6".equals(val) || "7".equals(val) || "8".equals(val)
                    || "9".equals(val)) {
                strNum = strNum + val;// 數字累加
                n = Double.parseDouble(strNum);
                txtNum.setText(n + "");// 顯示到文字框
            } else {
                // 此時有可能是C,CE,+,-,*,/等其他運算子
                if ("C".equals(val)) { // 點選清除鍵
                    txtNum.setText("0"); // 文字框顯示0
                    strNum = ""; // 數字累加字串回覆初始值
                    n = 0; // 運算數清0
                    sum=0; // 累加和清0
                    isOne = true;//預設是第1個數
                    op=""; //本次運算子清""
                    upOp=""; //上次運算子清""
                } else {
                    // 實現+,-,*,/四則混合運算
                    op = val;       //獲得本次運算子
                    if( "*".equals(op) || "/".equals(op)) {
                        //本次運算子是*或/時,優先運算
                        if(isOk) {//當實現乘除發首個數字時:結果=數
                            oldSum = sum;   //保留已有運算結果
                            oldOp = upOp;   //保留已有的運算子
                            sum = n;
                            isOk=false;
                            isOne = false;
                        }else {//當實現乘除法時,非首個數字時:結果=結果*數
                            if ("*".equals(upOp)) sum = sum * n;
                            else if ("/".equals(upOp)) sum = sum / n;
                        }

                    }else {

                        if (isOne) {
                            sum = n;// 第一個運算數無需任何運算
                            isOne = false;// 第一個運算數結束,其他運算數isOne=false
                        } else {
                            if ("+".equals(upOp)) sum = sum + n;
                            else if ("-".equals(upOp)) sum = sum - n;
                            else if ("*".equals(upOp)) sum = sum * n;
                            else if ("/".equals(upOp)) sum = sum / n;
                        }
                        //乘除運算執行後,累加舊的計算結果
                        if("+".equals(oldOp)) {
                            sum = oldSum + sum;
                        }else if("-".equals(oldOp)) {
                            sum = oldSum - sum;
                        }

                        oldSum = 0;
                        oldOp="";
                        isOk = true;
                    }
                    upOp = op;  //本次運算結束,這個運算子就變成了上一次的運算子
                    txtNum.setText( sum+"" );
                    strNum="";//清楚字串累加的舊資料,回覆初始值""
                }
            }
        }
    };

    // 按鈕顯示文字字串陣列
    String[] info = { "CE", "C", "+/-", "Exit",
                 "7", "8", "9", "+",
                 "4", "5", "6", "-", 
                "1", "2", "3", "*", 
                "0",".", "=", "/" };
    // 通過迴圈放置20個按鈕到面板
    for (int i = 0; i < 20; i++) {
        JButton btn = new JButton(info[i]);
        btn.addActionListener(listener);
        panel.add(btn);
    }

    frm.add(panel, BorderLayout.CENTER);// 通過邊框佈局,將面板放置窗體中間
    // 設定窗體顯示相關的屬性:
    frm.setSize(300, 220);// 窗體寬300,高200
    frm.setLocation(700, 50);// 窗體頂點座標x=700,y=50. 預設最左上角是0.0點
    frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 點選X按鈕關閉窗體
    frm.setVisible(true);// 設定窗體可見
}

}
其執行結果為:計算器圖片