用Java编写简单的计算器

目录

1.思路与分析

2.程序代码及分析

3.总结


1.思路与分析

首先我们需要提供一个面板,一些按钮,一个文本框,它可以实现简单的加,减,乘,除,接着我们可以将这些想法付诸行动。

2.程序代码及分析

package ap1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;

public class Calculator extends JFrame implements ActionListener{
    
	   JTextField textField;  //定义一个文本框
	   //定义一些按钮
	   JButton buttonAdd, buttonSubtract, buttonMultiply, buttonDivide, buttonEquals,buttonPoint,buttonClear;
	   JPanel panelMain; //定义一个面板
	   double num1, num2;
	   char operator;

	  public Calculator() {
		//设置窗口名字,大小
	    setTitle("简易计算器");
	    setSize(350, 350);

	    textField = new JTextField(30);
	    textField.setEditable(false);
	    //添加按钮
	    buttonAdd = new JButton("+");
	    buttonSubtract = new JButton("-");
	    buttonMultiply = new JButton("*");
	    buttonDivide = new JButton("/");
	    buttonEquals = new JButton("=");
	    buttonClear = new JButton("清除");
	    
	    panelMain = new JPanel(new GridLayout(4,5)); //网格式布局,四行五列
	    panelMain.add(buttonAdd);
	    panelMain.add(buttonSubtract);
	    panelMain.add(buttonMultiply);
	    panelMain.add(buttonDivide);
	    panelMain.add(buttonEquals);
	    panelMain.add(buttonClear);
	    //添加监听
	    buttonAdd.addActionListener(this);
	    buttonSubtract.addActionListener(this); 
	    buttonMultiply.addActionListener(this); 
	    buttonDivide.addActionListener(this); 
	    buttonEquals.addActionListener(this); 
	    buttonClear.addActionListener(this);
	    //添加1到9的按钮
	    for (int i = 1; i <= 9; i++) {
	      JButton button = new JButton("" + i);
	      button.addActionListener(this);  
	      panelMain.add(button);
	    }
        //设置添加0这个特殊的按钮

	    panelMain.add(new JButton());
	    JButton button0 = new JButton("0");
	    button0.addActionListener(this);   
	    panelMain.add(button0);
	    panelMain.add(new JButton());

	    Container container = getContentPane();
	    container.setLayout(new BorderLayout());

	    container.add(textField, BorderLayout.NORTH);
	    container.add(panelMain, BorderLayout.CENTER);
	         // 设置界面置顶
	 		this.setAlwaysOnTop(true);
	 		// 设置界面居中
	 		this.setLocationRelativeTo(null);
	 		//结束窗口所在的应用程序
	       setDefaultCloseOperation(3);
	       setVisible(true);

}

这是实现窗口及按钮的代码,为了方便阅读,我添加了注释,如果不够理解可以看一看《Java2实用教程》的第九章组件及事件处理。

@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		JButton button = (JButton) e.getSource();
	      String buttonText = button.getText();

	      if (buttonText.equals("清除")) {
	        num1 = 0;
	        num2 = 0;
	        operator = ' ';
	        textField.setText("");
	      } else if (buttonText.matches("[0-9]")) {
	        if (operator == ' ') {
	          num1 = num1 * 10 + Double.parseDouble(buttonText);
	        } else {
	          num2 = num2 * 10 + Double.parseDouble(buttonText);
	        }
	        textField.setText(textField.getText() + buttonText);
	      } else if (buttonText.matches("[+\\-*/]")) {
	        if (operator != ' ') {
	          calculate();
	        }
	        operator = buttonText.charAt(0);
	        textField.setText(textField.getText() + buttonText);
	      } else if (buttonText.equals("=")) {
	        calculate();
	        operator = ' ';
	      }
	}

这段代码是事件监听器中的一个方法actionPerformed,它用于响应用户在计算器上点击按钮时的事件。当用户选择了一个按钮时,button对象代表了发生事件的按钮,而buttonText则代表了发生事件的按钮的文本内容。
首先通过判断if (buttonText.equals("清除")),来判断用户是点击了“清除”按钮,如果是该按钮,则会将 num1,num2,operator 等参数清零,文本框textField 也将置为空。接着,通过判断if (buttonText.matches("[0-9]"))。如果用户选择了一个数字按钮,则首先需要检查operator变量是否为空,如果是,则代表用户正在输入第一个数字,此时需要将num1乘以10再加上当前输入的数字;否则代表用户正在输入第二个数字,此时需要将num2乘以10再加上输入的数字。另外,同时需要把数字文本追加到textField的文本末尾,便于用户看到自己输入的数字。
接着,通过判断if (buttonText.matches("[+\\-*/]")),来判断用户是选择了加减乘除中的一个运算符号。在这种情况下,首先需要判断operator是否为空,如果不为空,则表示此时可以立即计算出之前输入的运算,并将结果显示在textField中。然后将选择的运算符号赋值给operator,表示下一步用户需要输入第二个数字。
最后,如果用户选择的是等于号“=”,则需要立即进行运算,然后将operator变量设为空。
注意到,对于数字和运算符号的判断语句里使用了正则表达式的语法,用来判断字符串是否符合特定的格式。在这里,[0-9]表示任何一个数字字符,而[+\-*/]表示加、减、乘、除中的一个。

private void calculate() {
	      double result = 0;

	      switch (operator) {
	        case '+':
	          result = num1 + num2;
	          break;
	        case '-':
	          result = num1 - num2;
	          break;
	        case '*':
	          result = num1 * num2;
	          break;
	        case '/':
	          if (num2 != 0) {
	            result = num1 / num2;
	          } else {
	            System.out.println("除数不能为0!");
	          }
	          break;
	      }

	      num1 = result;
	      num2 = 0;
	      textField.setText(String.valueOf(result));
	    }
	public static void main(String[] args) {
	    new Calculator();
	  }
}  

这段代码是实现加减乘除的函数方法。

完整代码

package ap1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;

public class Calculator extends JFrame implements ActionListener{
    
	   JTextField textField;  //定义一个文本框
	   //定义一些按钮
	   JButton buttonAdd, buttonSubtract, buttonMultiply, buttonDivide, buttonEquals,buttonPoint,buttonClear;
	   JPanel panelMain; //定义一个面板
	   double num1, num2;
	   char operator;

	  public Calculator() {
		//设置窗口名字,大小
	    setTitle("简易计算器");
	    setSize(350, 350);

	    textField = new JTextField(30);
	    textField.setEditable(false);
	    //添加按钮
	    buttonAdd = new JButton("+");
	    buttonSubtract = new JButton("-");
	    buttonMultiply = new JButton("*");
	    buttonDivide = new JButton("/");
	    buttonEquals = new JButton("=");
	    buttonClear = new JButton("清除");
	    
	    panelMain = new JPanel(new GridLayout(4,5)); //网格式布局,四行五列
	    panelMain.add(buttonAdd);
	    panelMain.add(buttonSubtract);
	    panelMain.add(buttonMultiply);
	    panelMain.add(buttonDivide);
	    panelMain.add(buttonEquals);
	    panelMain.add(buttonClear);
	    //添加监听
	    buttonAdd.addActionListener(this);
	    buttonSubtract.addActionListener(this); 
	    buttonMultiply.addActionListener(this); 
	    buttonDivide.addActionListener(this); 
	    buttonEquals.addActionListener(this); 
	    buttonClear.addActionListener(this);
	    //添加1到9的按钮
	    for (int i = 1; i <= 9; i++) {
	      JButton button = new JButton("" + i);
	      button.addActionListener(this);  
	      panelMain.add(button);
	    }

	    panelMain.add(new JButton());
	    JButton button0 = new JButton("0");
	    button0.addActionListener(this);   
	    panelMain.add(button0);
	    panelMain.add(new JButton());

	    Container container = getContentPane();
	    container.setLayout(new BorderLayout());

	    container.add(textField, BorderLayout.NORTH);
	    container.add(panelMain, BorderLayout.CENTER);
	         // 设置界面置顶
	 		this.setAlwaysOnTop(true);
	 		// 设置界面居中
	 		this.setLocationRelativeTo(null);
	 		//结束窗口所在的应用程序
	       setDefaultCloseOperation(3);
	       setVisible(true);

}

	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		JButton button = (JButton) e.getSource();
	      String buttonText = button.getText();

	      if (buttonText.equals("清除")) {
	        num1 = 0;
	        num2 = 0;
	        operator = ' ';
	        textField.setText("");
	      } else if (buttonText.matches("[0-9]")) {
	        if (operator == ' ') {
	          num1 = num1 * 10 + Double.parseDouble(buttonText);
	        } else {
	          num2 = num2 * 10 + Double.parseDouble(buttonText);
	        }
	        textField.setText(textField.getText() + buttonText);
	      } else if (buttonText.matches("[+\\-*/]")) {
	        if (operator != ' ') {
	          calculate();
	        }
	        operator = buttonText.charAt(0);
	        textField.setText(textField.getText() + buttonText);
	      } else if (buttonText.equals("=")) {
	        calculate();
	        operator = ' ';
	      }
	}
	
	private void calculate() {
	      double result = 0;

	      switch (operator) {
	        case '+':
	          result = num1 + num2;
	          break;
	        case '-':
	          result = num1 - num2;
	          break;
	        case '*':
	          result = num1 * num2;
	          break;
	        case '/':
	          if (num2 != 0) {
	            result = num1 / num2;
	          } else {
	            System.out.println("除数不能为0!");
	          }
	          break;
	      }

	      num1 = result;
	      num2 = 0;
	      textField.setText(String.valueOf(result));
	    }
	public static void main(String[] args) {
	    new Calculator();
	  }
}  

3.总结

以上就是简单的计算器的代码实现及分析,大家有兴趣可以自己去试试。

  • 24
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值