本文实例总结了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程序设计有所帮助。