本文实例总结了Java编写计算器的常见方法。分享给大家供大家参考,具体如下:
方法一:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
package wanwa;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame {
private Container container;
private GridBagLayout layout;
private GridBagConstraints constraints;
private JTextField displayField; // 计算结果显示区
private String lastCommand; // 保存+,-,*,/,=命令
private double result; // 保存计算结果
private boolean start; // 判断是否为数字的开始
public Calculator() {
super ( "Calculator" );
container = getContentPane();
layout = new GridBagLayout();
container.setLayout(layout);
constraints = new GridBagConstraints();
start = true ;
result = 0 ;
lastCommand = "=" ;
displayField = new JTextField( 20 );
displayField.setHorizontalAlignment(JTextField.RIGHT);
constraints.gridx = 0 ;
constraints.gridy = 0 ;
constraints.gridwidth = 4 ;
constraints.gridheight = 1 ;
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 100 ;
constraints.weighty = 100 ;
layout.setConstraints(displayField, constraints);
container.add(displayField);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
// addButton("Backspace", 0, 1, 2, 1, insert);
// addButton("CE", 2, 1, 1, 1, insert);
// addButton("C", 3, 1, 1, 1, insert);
addButton( "7" , 0 , 2 , 1 , 1 , insert);
addButton( "8" , 1 , 2 , 1 , 1 , insert);
addButton( "9" , 2 , 2 , 1 , 1 , insert);
addButton( "/" , 3 , 2 , 1 , 1 , command);
addButton( "4" , 0 , 3 , 1 , 1 , insert);
addButton( "5" , 1 , 3 , 1 , 1 , insert);
addButton( "6" , 2 , 3 , 1 , 1 , insert);
addButton( "*" , 3 , 3 , 1 , 1 , command);
addButton( "1" , 0 , 4 , 1 , 1 , insert);
addButton( "2" , 1 , 4 , 1 , 1 , insert);
addButton( "3" , 2 , 4 , 1 , 1 , insert);
addButton( "-" , 3 , 4 , 1 , 1 , command);
addButton( "0" , 0 , 5 , 1 , 1 , insert);
// addButton("+/-", 1, 5, 1, 1, insert);// 只显示"-"号,"+"没有实用价值
addButton( "." , 2 , 5 , 1 , 1 , insert);
addButton( "+" , 3 , 5 , 1 , 1 , command);
addButton( "=" , 0 , 6 , 4 , 1 , command);
this .setResizable( false );
setSize( 180 , 200 );
setVisible( true );
}
private void addButton(String label, int row, int column, int with,
int height, ActionListener listener) {
JButton button = new JButton(label);
constraints.gridx = row;
constraints.gridy = column;
constraints.gridwidth = with;
constraints.gridheight = height;
constraints.fill = GridBagConstraints.BOTH;
button.addActionListener(listener);
layout.setConstraints(button, constraints);
container.add(button);
}
private class InsertAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();
if (start) {
displayField.setText( "" );
start = false ;
if (input.equals( "+/-" ))
displayField.setText(displayField.getText() + "-" );
}
if (!input.equals( "+/-" )) {
if (input.equals( "Backspace" )) {
String str = displayField.getText();
if (str.length() > 0 )
displayField.setText(str.substring( 0 , str.length() - 1 ));
} else if (input.equals( "CE" ) || input.equals( "C" )) {
displayField.setText( "0" );
start = true ;
} else
displayField.setText(displayField.getText() + input);
}
}
}
private class CommandAction implements ActionListener {
public void actionPerformed(ActionEvent evt) {
String command = evt.getActionCommand();
if (start) {
lastCommand = command;
} else {
calculate(Double.parseDouble(displayField.getText()));
lastCommand = command;
start = true ;
}
}
}
public void calculate( double x) {
if (lastCommand.equals( "+" ))
result += x;
else if (lastCommand.equals( "-" ))
result -= x;
else if (lastCommand.equals( "*" ))
result *= x;
else if (lastCommand.equals( "/" ))
result /= x;
else if (lastCommand.equals( "=" ))
result = x;
displayField.setText( "" + result);
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
|
方法二:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
import java.awt.*;
import java.awt.event.*;
public class MyCalculator {
PRivate Frame f;
private TextField tf = new TextField( 30 );
private long result;
private boolean append= false ;
private char Operator= '=' ;
private Button[] btn= new Button[ 15 ];
public MyCalculator() {
initComponent();
}
private void initComponent() {
f = new Frame( "My Calculator V1.0" );
f.setLayout( new BorderLayout()); //The frame uses BorderLayout
f.addWindowListener( new WindowAdapter() {
public void windowClosing(WindowEvent evt) {
System.exit( 0 );
}
});
Panel centerPanel = new Panel();
centerPanel.setLayout( new GridLayout( 5 , 3 )); //The panel uses GridLayout
NumberListener nl= new NumberListener();
OperatorListener ol= new OperatorListener();
btn[ 10 ]= new Button( "+" );
btn[ 11 ]= new Button( "-" );
btn[ 12 ]= new Button( "*" );
btn[ 13 ]= new Button( "/" );
btn[ 14 ]= new Button( "=" );
for ( int i= 0 ;i<= 9 ;i++){
btn[i]= new Button(String.valueOf(i));
centerPanel.add(btn[i]);
btn[i].addActionListener(nl);
if (i% 2 == 1 ){
centerPanel.add(btn[(i+ 19 )/ 2 ]);
btn[(i+ 19 )/ 2 ].addActionListener(ol);
}
}
f.add(centerPanel, BorderLayout.CENTER);
Panel northPanel = new Panel();
tf.setEditable( false );
northPanel.add(tf);
f.add(northPanel, BorderLayout.NORTH);
}
public void go() {
f.pack();
f.setVisible( true );
}
public static void main(String[] args) {
new MyCalculator().go();
}
/**
*采用成员内部类方式,实现监听器接口,方便访问主类内类内部成员。
*此类负责数字按钮Action事件监听和处理
*/
class NumberListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if (!append) {
tf.setText( "" );
append= true ;
}
String s=tf.getText();
s+=e.getActionCommand();
tf.setText(s);
if (!btn[ 10 ].isEnabled()){
for ( int i= 10 ;i<= 14 ;i++) btn[i].setEnabled( true );
}
}
}
/**
* 成员内部类,负责操作符按钮的事件处理
*/
class OperatorListener implements ActionListener{
public void actionPerformed(ActionEvent e){
if (!append) return ;
for ( int i= 10 ;i<= 14 ;i++) btn[i].setEnabled( false );
String s=tf.getText();
long num=Long.parseLong(s); //get the number of textfield
append= false ; //set append
switch (operator){
case '+' :result+=num; break ;
case '-' :result-=num; break ;
case '*' :result*=num; break ;
case '/' :{
if (num== 0 ) result= 0 ;
else result/=num;
break ;
}
case '=' :result=num; break ;
}
tf.setText(String.valueOf(result));
//set the value of result to textfield
String op=e.getActionCommand();
operator=op.charAt( 0 ); // set operator
}
}
}
|
方法三:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
package wanwa;
import java.util.*;
public class calc {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println( "*****************简易计算器****************" );
System.out.println( "*\t\t\t\t\t*" );
System.out.println( "* 使用说明: 1.加法 2.减法 3.乘法 4.除法 *" );
System.out.println( "*\t\t\t\t\t*" );
System.out.println( "*****************************************" );
for ( int i= 0 ;i< 100 ;i++){
System.out.print( "\n请选择运算规则:" );
int num = input.nextInt();
switch (num){
case 1 :
System.out.println( "\n******你选择了加法******\n" );
System.out.print( "请输入第1个加数:" );
int jiashu1 = input.nextInt();
System.out.print( "请输入第2个加数:" );
int jiashu2 = input.nextInt();
System.out.println( "运算结果为:" + jiashu1 + " + " + jiashu1 + " = " + (jiashu1 + jiashu2));
break ;
case 2 :
System.out.println( "\n******你选择了减法******\n" );
System.out.print( "请输入被减数:" );
int jianshu1 = input.nextInt();
System.out.print( "请输入减数:" );
int jianshu2 = input.nextInt();
System.out.println( "运算结果为:" + jianshu1 + " - " + jianshu2 + " = " + (jianshu1 - jianshu2));
break ;
case 3 :
System.out.println( "\n******你选择了乘法******\n" );
System.out.print( "请输入第1个因数:" );
int chengfa1 = input.nextInt();
System.out.print( "请输入第2个因数:" );
int chengfa2 = input.nextInt();
System.out.println( "运算结果为:" + chengfa1 + " * " + chengfa2 + " = " + (chengfa1 * chengfa2));
break ;
case 4 :
System.out.println( "\n******你选择了除法******\n" );
System.out.print( "请输入被除数:" );
double chufa1 = input.nextInt();
System.out.print( "请输入除数:" );
double chufa2 = input.nextInt();
System.out.println( "运算结果为:" + chufa1 + " / " + chufa2 + " = " + (chufa1 / chufa2) + " 余 " + (chufa1 % chufa2));
break ;
default :
System.out.println( "\n你的选择有错,请重新选择!" );
break ;
}
}
}
}
|
方法四:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
package wanwa;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator extends JFrame {
private Container container;
private GridBagLayout layout;
private GridBagConstraints constraints;
private JTextField displayField; // 计算结果显示区
private String lastCommand; // 保存+,-,*,/,=命令
private double result; // 保存计算结果
private boolean start; // 判断是否为数字的开始
public Calculator() {
super ( "Calculator" );
container = getContentPane();
layout = new GridBagLayout();
container.setLayout(layout);
constraints = new GridBagConstraints();
start = true ;
result = 0 ;
lastCommand = "=" ;
displayField = new JTextField( 20 );
displayField.setHorizontalAlignment(JTextField.RIGHT);
constraints.gridx = 0 ;
constraints.gridy = 0 ;
constraints.gridwidth = 4 ;
constraints.gridheight = 1 ;
constraints.fill = GridBagConstraints.BOTH;
constraints.weightx = 100 ;
constraints.weighty = 100 ;
layout.setConstraints(displayField, constraints);
container.add(displayField);
ActionListener insert = new InsertAction();
ActionListener command = new CommandAction();
// addButton("Backspace", 0, 1, 2, 1, insert);
// addButton("CE", 2, 1, 1, 1, insert);
// addButton("C", 3, 1, 1, 1, insert);
addButton( "7" , 0 , 2 , 1 , 1 , insert);
addButton( "8" , 1 , 2 , 1 , 1 , insert);
addButton( "9" , 2 , 2 , 1 , 1 , insert);
addButton( "/" , 3 , 2 , 1 , 1 , command);
addButton( "4" , 0 , 3 , 1 , 1 , insert);
addButton( "5" , 1 , 3 , 1 , 1 , insert);
addButton( "6" , 2 , 3 , 1 , 1 , insert);
addButton( "*" , 3 , 3 , 1 , 1 , command);
addButton( "1" , 0 , 4 , 1 , 1 , insert);
addButton( "2" , 1 , 4 , 1 , 1 , insert);
addButton( "3" , 2 , 4 , 1 , 1 , insert);
addButton( "-" , 3 , 4 , 1 , 1 , command);
addButton( "0" , 0 , 5 , 1 , 1 , insert);
// addButton("+/-", 1, 5, 1, 1, insert);// 只显示"-"号,"+"没有实用价值
addButton( "." , 2 , 5 , 1 , 1 , insert);
addButton( "+" , 3 , 5 , 1 , 1 , command);
addButton( "=" , 0 , 6 , 4 , 1 , command);
this .setResizable( false );
setSize( 180 , 200 );
setVisible( true );
}
private void addButton(String label, int row, int column, int with,
int height, ActionListener listener) {
JButton button = new JButton(label);
constraints.gridx = row;
constraints.gridy = column;
constraints.gridwidth = with;
constraints.gridheight = height;
constraints.fill = GridBagConstraints.BOTH;
button.addActionListener(listener);
layout.setConstraints(button, constraints);
container.add(button);
}
private class InsertAction implements ActionListener {
public void actionPerformed(ActionEvent event) {
String input = event.getActionCommand();
if (start) {
displayField.setText( "" );
start = false ;
if (input.equals( "+/-" ))
displayField.setText(displayField.getText() + "-" );
}
if (!input.equals( "+/-" )) {
if (input.equals( "Backspace" )) {
String str = displayField.getText();
if (str.length() > 0 )
displayField.setText(str.substring( 0 , str.length() - 1 ));
} else if (input.equals( "CE" ) || input.equals( "C" )) {
displayField.setText( "0" );
start = true ;
} else
displayField.setText(displayField.getText() + input);
}
}
}
private class CommandAction implements ActionListener {
public void actionPerformed(ActionEvent evt) {
String command = evt.getActionCommand();
if (start) {
lastCommand = command;
} else {
calculate(Double.parseDouble(displayField.getText()));
lastCommand = command;
start = true ;
}
}
}
public void calculate( double x) {
if (lastCommand.equals( "+" ))
result += x;
else if (lastCommand.equals( "-" ))
result -= x;
else if (lastCommand.equals( "*" ))
result *= x;
else if (lastCommand.equals( "/" ))
result /= x;
else if (lastCommand.equals( "=" ))
result = x;
displayField.setText( "" + result);
}
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
}
}
|
希望本文所述对大家Java程序设计有所帮助。