當前位置:編程學習大全網 - 編程語言 - java簡單計算器實驗報告

java簡單計算器實驗報告

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class 計算器 extends JFrame implements ActionListener {

private final String[] KEYS = { "7", "8", "9", "÷", "sqrt", "4", "5", "6",

"×", "%", "1", "2", "3", "-", "1/x", "0", "+/-", ".", "+", "=" };

private final String[] COMMAND = { "Backspace", "CE", "C" };

private final String[] M = { " ", "MC", "MR", "MS", "M+" };

private JButton keys[] = new JButton[KEYS.length];

private JButton commands[] = new JButton[COMMAND.length];

private JButton m[] = new JButton[M.length];

private JTextField resultText = new JTextField();

private boolean firstDigit = true;

private double resultNum = 0.0;

private String operator = "=";

static double mr;// 記憶的數字

private boolean operateValidFlag = true;

JPanel panel[]=new JPanel[4];

public 計算器(){

super("計算器");

init();

setBackground(Color.LIGHT_GRAY);

setResizable(false);

setLocation(588, 250);

setSize(378,214);

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); //窗口不能直接關閉

setVisible(true);

addWindowListener( new WindowAdapter() {

public void windowClosing(WindowEvent e){

if (JOptionPane.showConfirmDialog(null,"確定退出? ", "提示",2)==0){

System.exit(0);

}}});

}

private void init() {

setLayout(null);

for (int i = 0; i < 4; i++) {

panel[i]=new JPanel();

add(panel[i]);

}

panel[0].setLayout(new GridLayout(1,1,3,3));

panel[1].setLayout(new GridLayout(1,3,3,3));

panel[2].setLayout(new GridLayout(5,1,3,3));

panel[3].setLayout(new GridLayout(4,5,3,3));

resultText.setHorizontalAlignment(JTextField.RIGHT);

resultText.setAlignmentX(50);

resultText.setEditable(true);

resultText.setFont(new Font("宋體",Font.PLAIN,19));//設置字體

resultText.setBackground(Color.white);

panel[0].add(resultText);

for (int i = 0; i < KEYS.length; i++) {

keys[i] = new JButton(KEYS[i]);

panel[3].add(keys[i]);

if (i%5-3==0){ keys[i].setForeground(Color.red); }

else{keys[i].setForeground(Color.black);}

keys[i].setVisible(true);

keys[i].setFont(new Font(null,Font.PLAIN,17));//設置字體

keys[i].addActionListener(this);

keys[i].setHorizontalAlignment(keys[i].CENTER);

keys[i].setBackground(new Color(255,236,233));

}

keys[4].setFont(new Font(null,Font.PLAIN,13));//設置字體

keys[19].setForeground(Color.red);

for (int i = 0; i < COMMAND.length; i++) {

commands[i] = new JButton(COMMAND[i]);

panel[1].add(commands[i]);

commands[i].setForeground(Color.red);

commands[i].addActionListener(this);

}

commands[0].setFont(new Font(null,Font.PLAIN,12));//設置字體

for (int i = 0; i < M.length; i++) {

m[i] = new JButton(M[i]);

panel[2].add(m[i]);

m[i].setForeground(Color.red);

m[i].addActionListener(this);

}

panel[0].setBounds(2, 0, 370, 30);

panel[1].setBounds(74, 30, 298, 29);

panel[2].setBounds(2,30, 70, 150);

panel[3].setBounds(74,60, 300, 120);

validate();

}

public void actionPerformed(ActionEvent e) {

String label = e.getActionCommand();

if (label.equals(COMMAND[0])){ //用戶按了"Backspace"鍵

handleBackspace();

} else if (label.equals(COMMAND[1])) { //用戶按了"CE"鍵

resultText.setText("0");

} else if (label.equals(COMMAND[2])){ //用戶按了"C"鍵

handleC();

} else if (label.equals(M[4])){ //用戶按了"M+"鍵

mr=mr+Double.valueOf(resultText.getText()).doubleValue();

if (mr==0.0){m[0].setText("");}

else {m[0].setText("M");}

} else if (label.equals(M[3])){ //用戶按了"MS"鍵

mr=Double.valueOf(resultText.getText()).doubleValue();

if (mr==0.0){m[0].setText("");}

} else if (label.equals(M[2])){ //用戶按了"MR"鍵

resultText.setText(""+mr);

} else if (label.equals(M[1])){ //用戶按了"MC"鍵

mr=0.0;

m[0].setText("");

} else if (label.equals("sqrt")) { //平方根運算

resultNum = Math.sqrt(Double.valueOf(resultText.getText()).doubleValue());

resultText.setText(String.valueOf(resultNum));

} else if (label.equals("%")){ //百分號運算,除以100

resultNum = Double.valueOf(resultText.getText()).doubleValue() / 100;

resultText.setText(String.valueOf(resultNum));

} else if (label.equals("+/-")){ //正數負數運算

resultNum = Double.valueOf(resultText.getText()).doubleValue() * (-1);

resultText.setText(String.valueOf(resultNum));

} else if (label.equals("1/x")) { //倒數運算

resultNum=Double.valueOf(resultText.getText()).doubleValue();

if (resultNum == 0.0){ //操作不合法

operateValidFlag = false;

resultText.setText("零沒有倒數");

} else {

resultNum = 1 / resultNum;

}

resultText.setText(String.valueOf(resultNum));

} else if ("0123456789.".indexOf(label) >= 0) { //用戶按了數字鍵或者小數點鍵

handleNumber(label);

} else { //用戶按了運算符鍵

handleOperator(label);

}

}

private void handleBackspace() { // 處理Backspace鍵被按下的事件

String text = resultText.getText();

int i = text.length();

if (i > 0) { //退格,將文本最後壹個字符去掉

text = text.substring(0, i - 1);

if (text.length() == 0) { //如果文本沒有了內容,則初始化計算器的各種值

resultText.setText("0");

firstDigit = true;

operator = "=";

} else { //顯示新的文本

resultText.setText(text);

}

}

}

private void handleNumber(String key) { // 處理數字鍵被按下的事件

if (firstDigit) { //輸入的第壹個數字

resultText.setText(key);

} else if ((key.equals(".")) && (resultText.getText().indexOf(".") < 0)){

//輸入的是小數點,並且之前沒有小數點,則將小數點附在結果文本框的後面

resultText.setText(resultText.getText() + ".");

} else if (!key.equals(".")) { //如果輸入的不是小數點,則將數字附在結果文本框的後面

resultText.setText(resultText.getText() + key);

}

firstDigit = false; //以後輸入的肯定不是第壹個數字了

}

private void handleC() { //處理C鍵被按下的事件, 初始化計算器的各種值

resultText.setText("0");

firstDigit = true;

operator = "=";

}

private void handleOperator(String key) { //處理運算符鍵被按下的事件

if (operator.equals("÷")) { //除法運算 ,如果當前結果文本框中的值等於0

if (getNumberFromText() == 0.0){ //操作不合法

operateValidFlag = false;

resultText.setText("除數不能為零");

} else {

resultNum /= getNumberFromText();

}

} else if (operator.equals("+")){ //加法運算

resultNum += getNumberFromText();

} else if (operator.equals("-")){ //減法運算

resultNum -= getNumberFromText();

} else if (operator.equals("×")){ //乘法運算

resultNum *= getNumberFromText();

} else if (operator.equals("=")){ //賦值運算

resultNum = getNumberFromText();

}

if (operateValidFlag) { //雙精度浮點數的運算

long t1;

double t2;

t1 = (long) resultNum;

t2 = resultNum - t1;

if (t2 == 0) {

resultText.setText(String.valueOf(t1));

} else {

resultText.setText(String.valueOf(resultNum));

}

}

operator = key; //運算符等於用戶按的按鈕

firstDigit = true;

operateValidFlag = true;

}

private double getNumberFromText() { // 從結果文本框中獲取數字

double result = 0;

try {

result = Double.valueOf(resultText.getText()).doubleValue();

}

catch (NumberFormatException e){ }

return result;

}

public static void main(String args[]) {

new 計算器();

}

}

  • 上一篇:plc跳轉與標記指令只能在壹段程序使用嗎?
  • 下一篇:請各位《天之痕》大蝦幫我解決壹下以下問題~~`
  • copyright 2024編程學習大全網