21xrx.com
2025-04-21 23:13:24 Monday
文章检索 我的文章 写文章
Java实现简易计算器完整代码——课程设计
2023-06-15 17:08:48 深夜i     --     --
Java 计算器 代码设计

在计算机程序设计的学习中,设计一个简易计算器是一个经典的案例。这个案例能够帮助学生巩固Java基础知识以及算法设计能力。本文将介绍Java实现简易计算器的完整代码和课程设计。

1. 实现思路

在实现简易计算器的过程中,需要考虑以下几点:

1) 界面设计:通过图形界面(GUI)创建计算器的按键和显示框。

2) 计算逻辑:实现基本的四则运算,需要考虑运算符的优先级、括号等问题。

3) 异常处理:对于非法输入和除数为0等情况需要进行合理的处理。

4) 代码结构:实现代码的模块化,分离界面和计算逻辑,使代码可维护性更强。

2. 代码实现

在实现思路的基础上,可以采用Java Swing框架来实现计算器的图形界面。代码实现过程中,需要创建JPanel、JButton、JTextField等控件,并设置监听器来接收用户输入和处理计算逻辑。

以下是java实现简易计算器的代码:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame implements ActionListener{
  private JPanel panel;
  private JTextField resultField;
  private String[] buttons = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"};
  private JButton[] btn = new JButton[16];
  private double value1, value2;
  private char operation;
  public Calculator(){
    setTitle("Calculator");
    setLocationRelativeTo(null);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    panel = new JPanel(new GridLayout(4,4));
    resultField = new JTextField(10);
    resultField.setEditable(false);
    for(int i=0; i<16; i++){
      btn[i] = new JButton(buttons[i]);
      btn[i].addActionListener(this);
      panel.add(btn[i]);
    }
    add(resultField, BorderLayout.NORTH);
    add(panel, BorderLayout.CENTER);
    pack();
    setVisible(true);
  }
  public void actionPerformed(ActionEvent e){
    if(e.getSource() == btn[0]) resultField.setText(resultField.getText() + "7");
    else if(e.getSource() == btn[1]) resultField.setText(resultField.getText() + "8");
    else if(e.getSource() == btn[2]) resultField.setText(resultField.getText() + "9");
    else if(e.getSource() == btn[3]){
      value1 = Double.parseDouble(resultField.getText());
      operation = '/';
      resultField.setText("");
    }
    else if(e.getSource() == btn[4]) resultField.setText(resultField.getText() + "4");
    else if(e.getSource() == btn[5]) resultField.setText(resultField.getText() + "5");
    else if(e.getSource() == btn[6]) resultField.setText(resultField.getText() + "6");
    else if(e.getSource() == btn[7]){
      value1 = Double.parseDouble(resultField.getText());
      operation = '*';
      resultField.setText("");
    }
    else if(e.getSource() == btn[8]) resultField.setText(resultField.getText() + "1");
    else if(e.getSource() == btn[9]) resultField.setText(resultField.getText() + "2");
    else if(e.getSource() == btn[10]) resultField.setText(resultField.getText() + "3");
    else if(e.getSource() == btn[11]){
      value1 = Double.parseDouble(resultField.getText());
      operation = '-';
      resultField.setText("");
    }
    else if(e.getSource() == btn[12]) resultField.setText(resultField.getText() + "0");
    else if(e.getSource() == btn[13]) resultField.setText(resultField.getText() + ".");
    else if(e.getSource() == btn[14]){
      value2 = Double.parseDouble(resultField.getText());
      switch(operation){
        case '/':
          if(value2 == 0){
            JOptionPane.showMessageDialog(null, "除数不能为0!");
            resultField.setText("");
            return;
          }
          resultField.setText((value1 / value2) + "");
          break;
        case '*':
          resultField.setText((value1 * value2) + "");
          break;
        case '-':
          resultField.setText((value1 - value2) + "");
          break;
        case '+':
          resultField.setText((value1 + value2) + "");
          break;
      }
    }
    else if(e.getSource() == btn[15]){
      value1 = Double.parseDouble(resultField.getText());
      operation = '+';
      resultField.setText("");
    }
  }
  public static void main(String[] args){
    new Calculator();
  }
}

3. 课程设计

在Java实现简易计算器的代码基础上,可以进行课程设计,让学生进一步深入理解Java基础知识和算法设计能力。

设计要求:

1) 完善界面:可以添加更多的功能,如清除键、退格键等。

2) 扩展计算逻辑:添加更多的功能,如幂运算、三角函数、对数函数等。

3) 异常处理:对于更多的异常情况,如非法输入、负数的平方根等情况需要进行合理的处理。

4) 代码可读性:对代码进行优化,让代码更加简洁高效易读。

5) 代码扩展性:对代码进行设计,使得后续可以方便的添加更多的功能。

  
  

评论区