JAVA语言实现计算器小项目(与Windows附件自带计算器的标准版功能、界面相仿)

一、计算器界面

这里是引用

二、已实现功能

  • BackSpace:实现退格键
  • CE:清空文本框
  • C:清空并还原
  • +、-、*、/:加减乘除运算
  • +/-:取相反数
  • 1/x:取倒数
  • %:百分号
  • sqrt:平方根

三、准备工作和思路搭建

  • 界面布置

在这里插入图片描述

  • 界面具体步骤

上述表格中:
标号为1的是一个单独的JPanel面板,面板实行边界布局管理器------>这一步标记为①
标号为2的是一个单独的JPanel面板,面板实行网格布局管理器------>这一步标记为②
标号为3的是一个单独的JPanel面板,面板实行网格布局管理器------>这一步标记为③
标号为4的是一个单独的JPanel面板,面板实行网格布局管理器------>这一步标记为④
创建一个新的JPanel面板,将②和③合为一起,实行边界布局管理器,②置为北边,③置为中央------>这一步标记为⑤
此后便剩下①、⑤、④,所以使用JFrame这个大容器自身面板,创建新的边界布局管理器,①置为北边,④置为西边,⑤置为中央

  • 之后实行事件处理
    代码注释很详细了

四、代码与注释(已尽力做到条条代码条条注释了)

package calculator;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculator2 extends JFrame implements ActionListener {

	// 准备好东西
	// 显示计算机上4行5列区域的按键
	private String[] Keys = { "7", "8", "9", "/", "sqrt", "4", "5", "6", "*", "%", "1", "2", "3", "-", "1/x", "0",
			"+/-", ".", "+", "=" };
	// 定义5行1列的存储M键的按钮
	private String[] M = { "", "MC", "MR", "MS", "M+" };
	// 定义1行3列的命令行按钮
	private String[] Cmd = { "BackSpace", "CE", "C" };
	// 定义4行5列键的按钮
	private JButton[] keys = new JButton[Keys.length];
	// 定义5行1列M键的按钮
	private JButton[] m = new JButton[M.length];
	// 定义1行3列的功能命令按钮
	private JButton[] cmd = new JButton[Cmd.length];
	// 计算结果的文本框
	private JTextField resultText = new JTextField("0");
	// 第一个数字和运算符后的第一个数字的标识
	private boolean firstDigit = true;
	// 当前运算的运算符
	private String operator = "=";
	// 操作合法的标识
	private boolean operatorFlag = true;
	// 运算的中间结果
	private double resultMid = 0.0;

	public Calculator2() {
		super();
		init();
		// 设置计算器的背景颜色
		this.setBackground(Color.LIGHT_GRAY);
		this.setTitle("计算器");
		// 在屏幕中间位置显示计算器
		this.setLocationRelativeTo(null); 
		// 不许修改计算器的大小,即不可拉伸
		this.setResizable(false);
		// 设置可见性
		this.setVisible(true);
		//设置默认关闭
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		// 使计算器中各组件大小合适
		this.pack();
		this.setLocationRelativeTo(null); 
	}
	/*
	 * 进行整个计算器的初始化工作 即整个界面的布置
	 */
	private void init() {

		// 创建面板1来放置4行5列,并设置其布局管理器为网格布局,四行5列.且每一个格子的间距为3
		JPanel KEYS = new JPanel();
		KEYS.setLayout(new GridLayout(4, 5, 3, 3));
		// 实行放置,即实例化,并设置前景色
		for (int i = 0; i < Keys.length; i++) {
			keys[i] = new JButton(Keys[i]);
			// 设置按钮背景颜色
			if (i == 3 || i == 8 || i == 13 || i == 18 || i == 19) {
				keys[i].setForeground(Color.red);// 这些功能键为红色
			} else {
				keys[i].setForeground(Color.blue);// 其余的为红色
			}

			KEYS.add(keys[i]);
		}
		// 创建面板2用来放置M键,并设置前景色为红色
		JPanel Mm = new JPanel();
		Mm.setLayout(new GridLayout(5, 1, 3, 3));
		for (int i = 0; i < M.length; i++) {
			m[i] = new JButton(M[i]);
			m[i].setForeground(Color.red);
			Mm.add(m[i]);
		}
		// 创建面板3用来放置1行3列的命令行按钮按键
		JPanel CMD = new JPanel();
		CMD.setLayout(new GridLayout(1, 3, 3, 3));
		for (int i = 0; i < Cmd.length; i++) {
			cmd[i] = new JButton(Cmd[i]);
			cmd[i].setForeground(Color.red);
			CMD.add(cmd[i]);
		}
		// 创建面板4放置文本框,并设置布局管理器为边界布局
		JPanel text = new JPanel();
		text.setLayout(new BorderLayout());
		// 先对文本框进行设置
		// 1.设置文本框为不可编辑
		resultText.setEditable(false);
		// 2.设置背景色为白色
		resultText.setBackground(Color.white);
		// 3.设置文本框的内容向右对齐,参数为静态属性
		resultText.setHorizontalAlignment(JTextField.RIGHT);
		// 将文本框放置面板中
		text.add(resultText, "Center");
		//创建面板5将1行3列命令行功能键和4行5列按键放置一个大的面板中结为一起,采用边界布局,间距为3像素
		JPanel big = new JPanel();
		big.setLayout(new BorderLayout(3,3));
		big.add(CMD,"North");
		big.add(KEYS,"Center");
		//进行整体布局
		//虽然默认JFrame的布局管理器为边界布局,但是要设置其边距为3,故重新new一个
		this.setLayout(new BorderLayout(3,3));
		this.add(big,"Center");
		this.add(Mm,"West");
		this.add(text,"North");
		//所有按钮添加事件监听器
		for(int i=0;i<Keys.length;i++) {
			keys[i].addActionListener(this);
		}
		for(int j=0;j<M.length;j++) {
			m[j].addActionListener(this);
		}
		for(int i=0;i<Cmd.length;i++) {
			cmd[i].addActionListener(this);
		}
	}
	//进行事件处理,以按钮中的字符串内容为区分切入点
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		String content = e.getActionCommand();
		if(content.equals(Cmd[0])) {
			//如果用户按下了退格键,执行BackSpace()函数操作
			BackSpace();
			firstDigit=true;
		}else if(content.equals(Cmd[1])) {
			//如果用户按下了CE键,还原文本框,其余不变
			resultText.setText("0");
			firstDigit=true;
		}else if(content.equals(Cmd[2])) {
			//如果用户按下了C键,即还原计算器初始状态
			resultText.setText("0");
			// 当前运算的运算符
			operator = "=";
			// 操作合法的标识
			firstDigit = true;
		}else if("0123456789.".indexOf(content)>=0){//从该content内容是否包含在"0123456789."中,从而判断用户按下的是数字或小数点
			process(content);//按键数字处理的是文本框中的显示数据
			
		}else {//运算符处理
			//前面都不满足时执行这条语句,很巧妙
			handOperator(content);//当按下的按钮内容是运算符时
		}

	}

	//处理BackSpace键,这是计算器中的退格键,需要判断两个点,如果结果文本款中没有数字时则还原初始化计算器本身状态,如果有内容,则退去最后一个字符
	public void BackSpace() {
		String str = resultText.getText();//获取文本框的内容
		//进行判断内容情况
		if(str.length()>0) {
			str = str.substring(0, str.length()-1);//将最后一个字符去掉
			//去掉最后一个字符后如果新的文本框字符串中没有了字符则初始化计算器
			if(str.length()==0) {
				resultText.setText("0");
				// 当前运算的运算符
				operator = "=";
				// 操作合法的标识
				operatorFlag = true;
			}else {
				resultText.setText(str);
			}
		}	
	}
	//process,进行数字和小数点的处理
	public void process(String s) {
		if(firstDigit) {//判断是否是键入键盘的第一个数,便于将文本的初始0去掉
			resultText.setText(s);
		}else if((s.equals("."))&&(resultText.getText().indexOf("."))<0) {//如果第一个键入的数字是小数点
			resultText.setText(resultText.getText()+".");
			
		}else if(!(s.equals("."))) {//如果键入的不是小数点
			resultText.setText(resultText.getText()+s);
		}
		
		//此函数的代码执行到这里最后输入之后的数字便不再是第一个数字了。改变标志
		firstDigit=false;
	}
	//处理用户按下的是运算符的操作
	public void handOperator(String c) {
		if(operator.equals("/")) {//除法操作的运算符时
			if(getDoubleNum()==0.0) {//如果分母为0时
				operatorFlag=false;//操作不合法
				resultText.setText("分母不能为0");
			}else {
				resultMid /= getDoubleNum();//使用的结果赋值给中间值,因为初始默认是‘=’操作时,就把中间值赋值为第一个数字了
				
			}
		}else if(operator.equals("1/x")) {//如果按的是倒数运算符
			if(getDoubleNum()==0.0) {//如果分母为0时
				operatorFlag=false;//操作不合法
				resultText.setText("0没有倒数");
			}else {
				resultMid = 1/resultMid;//使用的结果赋值给中间值,因为初始默认是‘=’操作时,就把中间值赋值为第一个数字了
				
			}
		}else if(operator.equals("+")) {//如果是加法操作
			resultMid += getDoubleNum();
		}else if(operator.equals("*")) {//乘法
			resultMid *= getDoubleNum();
		}else if(operator.equals("sqrt")) {
			resultMid=Math.sqrt(getDoubleNum());
		}else if(operator.equals("%")) {
			//百分号操作
			resultMid=resultMid/100;
		}else if (operator.equals("+/-")) {
			// 正数负数运算
			resultMid = resultMid * (-1);
		} else if (operator.equals("=")) {
			// 赋值运算
			resultMid = getDoubleNum();
		}else if(operator.equals("-")) {
			resultMid -= getDoubleNum();
		}
		//判断合法后将结果存储在结果文本框中
		if (operatorFlag) {
			// 双精度浮点数的运算
			long t1;
			double t2;
			t1 = (long) resultMid;//转化为long后,其后面的小数点会没有
			t2 = resultMid - t1;//double-long
			if (t2 == 0) {//说明此时resultMid是整数
				resultText.setText(String.valueOf(t1));
			} else {//double类型
				resultText.setText(String.valueOf(resultMid));
			}
			
		}
		//运算符等于用户按下的按钮
		operator=c;
		firstDigit = true;
		operatorFlag = true;
	}
	//获取结果框中的数字字符串,并转化为double类型
	public double getDoubleNum() {
		try {
			return Double.valueOf(resultText.getText()).doubleValue();
		}catch(NumberFormatException e) {
			return 0;
		}		
	}
	public static void main(String[] args) {
		new Calculator2();
	}
}

六、下载

程序已上传至资源,需要的朋友们可点击下载,谢谢支持。
点击下载学习

七、写在后面

上述文章如有出错的地方,欢迎读者朋友们评论指正,谢谢。
在这里插入图片描述

  • 20
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: Java制作计算器的实施步骤与技术要点如下: 1. 定义计算器的用户界面:可以使用Java图形用户界面(GUI)库来创建计算器窗口,并添加按钮、文本框和其他必要的组件。 2. 实现计算器的基本功能: - 定义数值按钮和操作符按钮的事件处理程序,以便当用户点击按钮时执行相应的操作。 - 在计算器窗口的文本框中显示用户的输入和计算结果。 - 实现基本的算术运算,例如加法、减法、乘法和除法,以及其他可能的功能,例如求平方根和百分比计算。 3. 处理用户输入: - 使用事件监听器来监听按钮的点击事件和文本框的输入事件。 - 对于数值按钮,将用户的输入追加到文本框中的数值。 - 对于操作符按钮,将用户的输入传递给计算函数,执行相应的操作,并将结果显示在文本框中。 4. 异常处理: - 在进行计算时,要注意处理可能出现的异常情况,例如除数为零或非法的输入。 - 可以使用try-catch语句块来捕获并处理异常,并向用户显示错误消息。 5. 测试和调试: - 在实现过程中,测试每个功能的正确性和稳定性。 - 通过输入不同的数值和操作符进行测试,验证计算器是否产生正确的结果。 - 在调试过程中,可以使用调试工具来跟踪程序的执行流程,并查找和修复代码中的错误。 技术要点: - Java编程语言:使用Java编写计算器程序,并利用Java的面向对象特性进行设计和实现。 - Java GUI库:使用Java Swing或JavaFX等GUI库创建用户界面,定义窗口、按钮和文本框等UI组件。 - 事件处理:使用事件监听器来处理按钮的点击事件和文本框的输入事件,实现按钮和文本框的交互功能。 - 算术运算:使用Java提供的算术运算符和函数来实现基本的算术运算,例如加法、减法、乘法和除法等。 - 异常处理:使用try-catch语句块来捕获和处理可能出现的异常情况,例如除数为零或非法的输入。 - 测试和调试工具:使用测试用例和调试工具来验证程序的正确性和完整性,修复代码中的错误。 ### 回答2: Java制作计算器的实施步骤与技术要点如下: 步骤1:设计计算器界面 首先,需要设计计算器界面,包括数字键、运算符键、等号键和显示屏等。可以使用Java Swing或JavaFX进行界面设计,选择合适的布局管理器来布置界面元素。 步骤2:实现界面与逻辑的交互 通过添加事件监听器,实现用户点击数字键和运算符键时的交互效果。例如,点击数字键时将数字显示在屏幕上,点击运算符键时将运算符保存起来。 步骤3:实现基本的计算逻辑 根据用户输入的数字和运算符,实现基本的计算逻辑。可以使用Java的数学库提供的函数来进行加减乘除等运算,同时要考虑除以零的异常处理。 步骤4:处理连续运算 允许用户进行连续的运算,例如输入"1+2+3="后显示结果6,并将结果保存下来作为下一次计算的初始值。要注意清空运算符和数字的状态。 步骤5:处理小数点和负数 支持输入小数点和负数,参考相应的输入规则进行处理。可以使用正则表达式来验证用户输入的合法性。 步骤6:处理其他功能 根据需求,可以添加其他功能,如百分号、开方、取反等。根据具体需求选择合适的算法实现。 步骤7:进行测试 编写测试用例对计算器进行全面的测试,包括正常输入、边界输入和异常输入,确保计算器功能正确和稳定。 技术要点: 1. 熟悉Java Swing或JavaFX的界面设计和事件处理。 2. 熟悉Java数学库提供的数学函数和异常处理。 3. 熟悉正则表达式的使用,来验证用户输入的合法性。 4. 熟悉软件测试的方法和技巧,编写全面的测试用例。 5. 注意界面的用户友好性,例如合理的布局、按钮样式和交互效果。 6. 编写清晰的代码,注重可读性和可维护性,采用合适的设计模式和代码结构。 ### 回答3: 制作一个计算器的实施步骤与技术要点如下: 1. 界面设计:首先,你需要设计一个用户界面,包括数字按钮、运算符按钮和显示屏。你可以使用Swing、JavaFX或者Android等技术来创建用户界面。 2. 事件处理:为每个按钮设置事件监听器,以便在用户点击按钮时执行相应的操作。 3. 数字输入:当用户点击数字按钮时,将数字添加到显示屏上的运算表达式中。 4. 运算符输入:当用户点击运算符按钮时,将该运算符添加到显示屏上的运算表达式中。 5. 运算逻辑:当用户点击等号按钮时,解析显示屏上的运算表达式,并计算结果。可以使用字符串分割和堆栈数据结构来实现运算逻辑。 6. 错误处理:对于无效的运算表达式(例如除以零或缺少操作数),应该给予用户相应的错误提示。 7. 优化与拓展:可以考虑添加括号支持、计算历史记录等功能,以增强计算器的实用性。 技术要点: 1. Java编程语言计算器可以使用Java来开发,Java提供了丰富的类库和API,用于实现图形用户界面、事件处理、字符串处理等功能。 2. 用户界面库:你可以选择Swing、JavaFX等库来创建计算器的用户界面。这些库提供了各种组件,例如按钮、文本框等,以便你能够创建与用户交互的界面。 3. 事件处理:通过使用监听器接口,你可以捕获按钮的点击事件,并在事件发生时执行相应的操作。 4. 字符串处理:使用字符串处理功能,你可以解析用户在显示屏上输入的运算表达式,并进行相应的计算。 5. 错误处理:使用异常处理机制,你可以捕获和处理运算过程中可能出现的错误,以便给予用户正确的提示或者执行相应的恢复措施。 总之,制作一个计算器需要首先设计用户界面,然后实现事件处理和运算逻辑,同时需要进行错误处理和逻辑优化,以提供稳定和方便的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-希冀-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值