分享
 
 
 

用Java编写计算器的几种常见的做法

王朝学院·作者佚名  2010-01-01
窄屏简体版  字體: |||超大  

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

}

}

}

方法2:

——————————————————————————————————————————————

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;

}

}

}

}

第三种写法:

——————————————————————————————————————————————

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);

}

}

第四种写法:

——————————————————————————————————————————————

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);

}

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jspamd/archive/2009/12/29/5101649.aspx

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有