用java編寫一個簡單的計算器


學習java有一段時間了,所以打了一個有關於計算器的代碼。雖然簡單,但是卻是我花了很長一段時間才寫出來的。

 思路就是以下的代碼了,關鍵的注釋已經寫出來了,應該可以幫助大家吧。

多的沒啥子寫的,只知道當時寫的時候真的腦子里一團漿糊·······

下面展示代碼:

  1 import java.awt.BorderLayout;
  2 import java.awt.Container;
  3 import java.awt.Font;
  4 import java.awt.GridLayout;
  5 import java.awt.event.ActionEvent;
  6 import java.awt.event.ActionListener;
  7 import java.util.Arrays;
  8 
  9 import javax.swing.JButton;
 10 import javax.swing.JFrame;
 11 import javax.swing.JOptionPane;
 12 import javax.swing.JPanel;
 13 import javax.swing.JTextField;
 14 
 15 public class Calculator extends JFrame implements ActionListener {
 16 // 屬性
 17 JTextField txtResult;
 18 boolean firstDigit = true;//用於判斷是否是數字
 19 String operator = "=";//先初始化為等號,等到執行相應運算時再更改
 20 boolean operateValidFlag = true;//判斷除數是否為0
 21 double resultNum = 0.0;//可以暫存目前的最終結果
 22 // 方法
 23 public Calculator() {
 24 setTitle("計算器");
 25 setSize(240, 270);
 26 setResizable(false);
 27 setLocationRelativeTo(null);
 28 setDefaultCloseOperation(EXIT_ON_CLOSE);
 29 
 30 Container contentPane = this.getContentPane();
 31 contentPane.setLayout(new BorderLayout(1, 5));
 32 JPanel pnlNorth = new JPanel();
 33 JPanel pnlCenter = new JPanel();
 34 
 35 pnlNorth.setLayout(new BorderLayout());
 36 pnlCenter.setLayout(new GridLayout(4, 4, 3, 3));
 37 
 38 Font font = new Font("Times Roman", Font.BOLD, 20);
 39 
 40 contentPane.add(BorderLayout.NORTH, pnlNorth);
 41 contentPane.add(BorderLayout.CENTER, pnlCenter);
 42 
 43 txtResult = new JTextField();
 44 txtResult.setFont(font);
 45 txtResult.setEnabled(false);
 46 JButton btnClear = new JButton("C");
 47 btnClear.setFont(font);
 48 btnClear.addActionListener(this);
 49 
 50 pnlNorth.add(BorderLayout.CENTER, txtResult);
 51 pnlNorth.add(BorderLayout.EAST, btnClear);
 52 
 53 String[] captions = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "*", "0", ".", "/", "=", };
 54 for (int i = 0; i < captions.length; i++) {
 55 JButton btn = new JButton(captions[i]);
 56 btn.setFont(font);
 57 pnlCenter.add(btn);
 58 btn.addActionListener(this);
 59 
 60 }
 61 
 62 }
 63 
 64 public static void main(String[] args) {
 65 JFrame frame = new Calculator();
 66 frame.setVisible(true);
 67 }
 68 //對按鈕進行的反應
 69 @Override
 70 public void actionPerformed(ActionEvent event) {
 71 String label = event.getActionCommand();
 72 if (label.equals("C") ){
 73 handleC();
 74 } else if ("0123456789.".indexOf(label) >= 0) {
 75 //無論整數還是小數都一起提取出來
 76 handleNumber(label);
 77 } else {
 78 //將當前要執行的運算的運算符賦給operator
 79 handleOperator(label);
 80 }
 81 }
 82 
 83 //提取數字
 84 void handleNumber(String key) {
 85 if (firstDigit) {
 86 txtResult.setText(key);//在文本框中顯示數字的字符串
 87 } else if ((key.equals(".")) && (txtResult.getText().indexOf(".") < 0)) {
 88 
 89 txtResult.setText(txtResult.getText() + ".");//在文本框中顯示整數數字的字符串
 90 } else if (!key.equals(".")) {
 91 
 92 txtResult.setText(txtResult.getText() + key);//在文本框中顯示整數數字的字符串
 93 }
 94 firstDigit = false;//當數字顯示完之后,即可重置為false
 95 }
 96 
 97 //實現清零
 98 void handleC() {
 99 
100 txtResult.setText("0");
101 firstDigit = true;
102 operator = "=";
103 }
104 //進行運算
105 void handleOperator(String key) {
106 if (operator.equals("/")) {
107 //判斷除數是否為0
108 if (getNumberFromText() == 0.0) {
109 //以下代碼很關鍵,不做多余說明,每次看都有不同的理解
110 operateValidFlag = false;
111 txtResult.setText("除數不能為零");
112 } else {
113 resultNum /= getNumberFromText();
114 }
115 } else if (operator.equals("+")) {
116 
117 resultNum += getNumberFromText();
118 } else if (operator.equals("-")) {
119 
120 resultNum -= getNumberFromText();
121 } else if (operator.equals("*")) {
122 
123 resultNum *= getNumberFromText();
124 } else if (operator.equals("=")) {
125 
126 resultNum = getNumberFromText();
127 }
128 
129 if (operateValidFlag) {
130 long t1;
131 double t2;
132 t1 = (long) resultNum;
133 t2 = resultNum - t1;
134 if (t2 == 0) {
135 txtResult.setText(String.valueOf(t1));
136 } else {
137 txtResult.setText(String.valueOf(resultNum));
138 }
139 }
140 operator = key;
141 firstDigit = true;
142 operateValidFlag = true;
143 }
144 
145 double getNumberFromText() {
146 double result = 0;
147 try {
148 result = Double.valueOf(txtResult.getText()).doubleValue();//把String轉化成Double類型的對象,並求double的原始值
149 } catch (NumberFormatException e) {
150 }
151 return result;
152 }

 

運行結果如圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM