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

方法一:

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

}

 

方法二:

 

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
       }
   }
}

 

 

方法三:

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

} 

 

 

 

 

posted @ 2012-08-07 17:35  沧海小强  阅读(23400)  评论(0编辑  收藏  举报