java實現計算器(最低版1.0,只能實現從左到右依次計算)——初學者入門
阿新 • • 發佈:2018-11-14
軟體:eclipse
才開始用java設計東西,我覺得這個程式適用於初步想設計計算器的同學用,雖然很簡單,但我會慢慢更新自己所寫計算器,實現更強的邏輯。
例如:61-7*4=216(從左至右的簡單邏輯,還不完善)
程式碼:(有詳細註釋)
//大佬不適合看!
package layout;
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
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 javax.swing.border.Border;
public class CalculatorFrame extends JFrame {
// 屬性
JTextField Text = null;
boolean beginNum = false;
String num1 = null;
String num2 = null;
String operator = null;
// 方法
public CalculatorFrame() {
setTitle("Borderlayout Demo");
setSize(250, 300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// 獲取主內容面板
Container contentPane = this.getContentPane();
// 設定佈局方式:邊框型佈局
contentPane.setLayout(new BorderLayout() );
// 單獨處理NORTH佈局
// 獲得中間容器面板並放在主面板的NORTH
JPanel pnlNorth = new JPanel();
// 邊框型佈局
pnlNorth.setLayout(new BorderLayout());
// 放置
contentPane.add(BorderLayout.NORTH, pnlNorth);
// 文字框
Text = new JTextField();
// 按鈕(清零)
JButton btnOK = new JButton("C");
// 放置
pnlNorth.add(BorderLayout.CENTER, Text);
pnlNorth.add(BorderLayout.EAST, btnOK);
// 單獨處理CENTER佈局
// //獲得中間容器面板並放在主面板的CENTER
String[] s = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3","*", "0", "." ,"/", "=" };
JPanel pnlNorthTow = new JPanel();
// 放置
contentPane.add(BorderLayout.CENTER, pnlNorthTow);
// 網狀佈局
pnlNorthTow.setLayout(new GridLayout(0, 4, 3, 3));
// 內部類
ActionListener listener = new ActionListener() {
public void actionPerformed(ActionEvent event) {
String cmd = event.getActionCommand();
// JOptionPane.showMessageDialog(null, cmd);
/*if (cmd.equals("0") || cmd.equals("1") || cmd.equals("2") || cmd.equals("3") || cmd.equals("4")
|| cmd.equals("5") || cmd.equals("6") || cmd.equals("7") || cmd.equals("8")
|| cmd.equals("9")) {*/
if("0123456789".contains(cmd)){
// 輸入1時(61顯示)
if (beginNum) {
Text.setText(Text.getText() + cmd);
}
// 輸入6時
else {
Text.setText(cmd);
beginNum = true;
}
}
// 輸入“—”時
//if (cmd.equals("+") || cmd.equals("-") || cmd.equals("*") || cmd.equals("/")) {
if("+-*/".contains(cmd)){
beginNum = false;
// 當operator為空的時候,與equals的區別
if (operator == null) {
// 文字框內容賦給num1
num1 = Text.getText();
// 減號賦給operator
operator = cmd;
// 清空文字框
Text.setText(null);
}
// operator不為空時(輸入*的時候)
else {
// 把7賦給num2
num2 = Text.getText();
// 計算num1值並放在文字框裡面
if(operator.equals("-"))
num1 = String.valueOf(Integer.parseInt(num1) - Integer.parseInt(num2));
if(operator.equals("+"))
num1 = String.valueOf(Integer.parseInt(num1) + Integer.parseInt(num2));
if(operator.equals("*"))
num1 = String.valueOf(Integer.parseInt(num1) * Integer.parseInt(num2));
if(operator.equals("/"))
num1 = String.valueOf(((double)Integer.parseInt(num1) / Integer.parseInt(num2)));
Text.setText(num1);
// 把*賦給operator
operator = cmd;
}
}
//當輸等號時
if ("=".equals(cmd)) {
// 結束置為false
beginNum = false;
// 將4賦給num2
num2 = Text.getText();
if(operator.equals("-"))
num1 = String.valueOf(Integer.parseInt(num1) - Integer.parseInt(num2));
if(operator.equals("+"))
num1 = String.valueOf(Integer.parseInt(num1) + Integer.parseInt(num2));
if(operator.equals("*"))
num1 = String.valueOf(Integer.parseInt(num1) * Integer.parseInt(num2));
if(operator.equals("/"))
num1 = String.valueOf(((double)Integer.parseInt(num1) / Integer.parseInt(num2)));
Text.setText(String.valueOf(num1));
num1 = null;
//num2=null;
operator = null;
}
if("C".equals(cmd)){
Text.setText(null);
}
}
};
for (int i = 0; i < 16; i++) {
JButton btn = new JButton(s[i]);
pnlNorthTow.add(btn); // 注意各個面板的add
// 數字符號等輸入放置
btn.addActionListener(listener);
}
// 按鈕輸入放置
btnOK.addActionListener(listener);
}
public static void main(String[] args) {
JFrame frame = new CalculatorFrame();
frame.setVisible(true);
}
}