zoukankan      html  css  js  c++  java
  • 用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);
    }
    
    } 

     

     

  • 相关阅读:
    1.6(设计模式)过滤器模式
    1.5(设计模式)单例模式
    1.4(设计模式)原型模式
    获取第几周
    前端的一个工具函数库
    纯css实现宽度自适应,高度与宽度成比例
    网站前面的图标
    从url获取参数有中文时会出现乱码的问题
    关于ios使用jquery的on,委托事件失效
    在vue1.0遇到vuex和v-model的坑
  • 原文地址:https://www.cnblogs.com/token/p/2627072.html
Copyright © 2011-2022 走看看