[Java开发实例]  计算器功能实现

Java开发实例  计算器功能实现

需要实现的功能(比较简单)

所实现的功能:
1、清零;
2、切换第一个操作数的符号;
3、逐个删除数字(遇到运算符截止);
4、输入操作数;
5、+、-、×、÷、=运算
6、为最近的操作数添加小数点

 

步骤:
        1.定义一个CalculatorListener事件处理类,该类实现ActionListener动作事件接口,重写接口中的抽象方法。
        2.实例化CalculatorListener事件处理类的对象,对象名cl。
        3.给事件源对象按钮添加addActionLsitener动作监听方法,指定事件处理类的对象cl。
        
    根据输入的内容,进行计算。
        String字符串的操作
        
//计算器主类  

最后再设置窗体可见就可以了。 

package calculator;

import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Calculator extends JFrame {
	private static final long serialVersionUID = 1L;
	public static void main(String[] args) {
		Calculator cal = new Calculator();
		cal.initUI();
	}
	public void initUI(){
		// 设置窗体的属性值
		this.setTitle("计算器");
		this.setSize(400, 590);
		this.setDefaultCloseOperation(3);
		this.setLocationRelativeTo(null);
		this.setResizable(false);// 禁止调整窗体的大小
		this.setLayout(new FlowLayout());
		
		JLabel labShow = new JLabel("0.0");
		// 设置组件的大小
		labShow.setPreferredSize(new Dimension(380, 100));
		// 设置组件上字体
		labShow.setFont(new Font("Courier New", Font.BOLD, 40));
		// 设置标签中文字的对齐方式
		labShow.setHorizontalAlignment(JLabel.RIGHT);
		this.add(labShow);
		
		//2.实例化CalculatorListener事件处理类的对象,对象名cl。
		CalculatorListener cl = new CalculatorListener(labShow);
		
		// 定义数组,存储按钮上要显示的文字信息
		String[] array = { "C", "±", "←", "÷", "7", "8", "9", "×", "4", "5", "6", "-", "1", "2", "3",
				"+",  "0", ".", "=" };
		// 循环array数组,根据数组中的数据创建按钮对象,将按钮对象添加到窗体上
		for (int i = 0; i < array.length; i++) {
			JButton button = new JButton(array[i]);
			if(array[i].equals("0"))button.setPreferredSize(new Dimension(175, 85));
			else button.setPreferredSize(new Dimension(85, 85));
			this.add(button);
			
			//3.给事件源对象按钮添加addActionLsitener动作监听方法,指定事件处理类的对象cl。
			button.addActionListener(cl);
			
		}
		
		this.setVisible(true);
	}
}

//事件处理类

package calculator;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;

public class CalculatorListener implements ActionListener{
	private JLabel labShow;
	String label_Text;//标签文本
	String num1="";//从字符串中截取数字
	String	op="";//运算符
	double num01=0.0,num02=0.0;
	int  numOfNum=0;
	boolean end=false;
	public CalculatorListener(JLabel labShow) {
		this.labShow=labShow;
	}

	public void actionPerformed(ActionEvent e) {
		String text=e.getActionCommand();
		label_Text = labShow.getText();
		if(end) {
			label_Text="0.0";end=false;
		}
		//正负号运算
		if(text.equals("±")){
			if(label_Text.subSequence(0, 1).equals("-")) label_Text=text.substring(1);
			else label_Text="-"+label_Text;
		}
		//重置清零
		else if(text.equals("C")) {
			label_Text="0.0";
			numOfNum=0;num01=0;num02=0;op="";
		}
		//删除操作,遇到运算符就停止
		else if(text.equals("←")) {
			if(!(label_Text.substring(label_Text.length()-1).equals("+")
					||label_Text.substring(label_Text.length()-1).equals("-")
					||label_Text.substring(label_Text.length()-1).equals("×")
					||label_Text.substring(label_Text.length()-1).equals("÷")))
			label_Text=label_Text.substring(0,label_Text.length()-1);
		}
		//加小数点
		else if(text.equals(".")){
			int l=label_Text.length();boolean if_is=false;
			for(int i=0;i<l;i++){
				//第一个操作数中有小数点是允许的
				if(label_Text.subSequence(i, i+1).equals("."))if_is=true;
				//运算符后,第二个操作数没有小数点才能进行加小数点操作
				else if(label_Text.subSequence(i, i+1).equals("+")||label_Text.subSequence(i, i+1).equals("-")||label_Text.subSequence(i, i+1).equals("×")||label_Text.subSequence(i, i+1).equals("÷")){
					if_is=false;
				}
				if(i==l-1&&if_is==false){
					label_Text+=".";
				}
			}
		}
		//数字的话直接添加
		else if (text.equals("0") || text.equals("1") || text.equals("2") 
		    || text.equals("3") || text.equals("4")|| text.equals("5") || text.equals("6")
		    || text.equals("7") || text.equals("8") || text.equals("9")) {
			 if(label_Text.equals("0.0")){label_Text="";}
			 else if(label_Text.equals("-0.0")){label_Text="-";}
			 label_Text+=text;
		 }
		
		//运算符
		else if(text.equals("+")||text.equals("-")||text.equals("×")||text.equals("÷")||text.equals("=")){
			//运算符前没有保存操作数,则将运算符前数字赋值为第一个操作数
			if(numOfNum==0){
				num1=label_Text;
				num01=Double.parseDouble(num1);//String直接转double
				numOfNum=1;
				System.out.println("第一个数:"+num1);        //调试输出语句
			}
			//运算符前已经保存了一个操作数,则将运算符前数字赋值给第二个操作数
			else if(numOfNum==1){
				label_Text+=text;
				for(int i=0;i<label_Text.length()-1;i++){
					
					if(i==0&&label_Text.subSequence(0,1).equals("-"))i++;//忽略负号
					
					String temp=(String) label_Text.subSequence(i, i+1);
					//取第二个操作数
					if(temp.equals("+")||temp.equals("-")||temp.equals("×")||temp.equals("÷")){
						temp=label_Text.substring(i+1,label_Text.length()-1);
						System.out.println("第二个数:"+temp);                      //||temp.equals("=")
						num02=Double.parseDouble(temp);numOfNum=2;  break;
					}
				}
			}
			//如果有了两个操作数,就进行运算
			if(numOfNum==2){
				System.out.println("第一个数:"+num01+" 第二个数:"+num02);                      //
				if(op.equals("+"))num01+=num02;
				else if(op.equals("+"))num01-=num02;
				else if(op.equals("×"))num01*=num02;
				else if(op.equals("÷"))num01/=num02;
				label_Text="";label_Text+=num01;numOfNum=1;
				labShow.setText(label_Text);
			}
			//记录除“=”外的运算符
			if(!text.equals("=")){
				op=text;
				label_Text+=text;labShow.setText(label_Text);
			}
			//“=”的话,输出,重置
			else{
				labShow.setText(label_Text);
				numOfNum=0;num01=0;num02=0;op="";
				end=true;
			}
		}
		labShow.setText(label_Text);
	}

}

实现效果:

QQ:375471598

微信:Q159837547

欢迎过来勾搭小邱同学,或者对文章提出修改意见,共同成长。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值