JAVA实现简单计算器

实现简单的加减乘除运算
package chapter07.project_4;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class window extends JFrame implements ActionListener{
	private String operator = "="; //当前运算的运算符
	private boolean firstDigit = true;	//判断是否是第一个数字
	private double resultNum = 0.0; // 计算的中间结果
	private boolean operateValidFlag = true; //判断操作是否合法
	
	private JPanel jp = new JPanel();	//创建面板
	private JTextField jtxtName = new JTextField("0");	//创建文本框
	private JButton Del = new JButton("C");	//创建按钮
	private JButton[] jbArray = {new JButton("7"),new JButton("4"),new JButton("1"),new JButton("0"),
							new JButton("8"),new JButton("5"),new JButton("2"),new JButton("."),
							new JButton("9"),new JButton("6"),new JButton("3"),new JButton("="),
							new JButton("+"),new JButton("-"),new JButton("*"),new JButton("/")};
	
	//定义构造函数
	public window(){
		jp.setLayout(null);	//设置JPanel的布局管理器

		for(int i = 0, j = 0; i < 16; i++){
			jbArray[i].setBounds(j * 60, 50 + (i%4) * 30, 60, 30);	//设置按钮大小
			jp.add(jbArray[i]);	//将按钮添加进JPanel
			jbArray[i].addActionListener(this);	//为按钮注册监听器
			if(i%4 == 3) j++;
		}
		Del.setBounds(180,10,60,30);
		jp.add(Del);
		Del.addActionListener(this);
		
		jtxtName.setBounds(10,10,160,30);
		jp.add(jtxtName);
		jtxtName.addActionListener(this);
		
		this.add(jp);	//将JPanel容器添加进窗体
		this.setTitle("计算器");
		this.setResizable(false);	//窗体不可自由改变大小
		this.setBounds(100,100,246,197);
		this.setVisible(true);	//窗体可见
	}
	
	//实现ActionListener中的方法
	public void actionPerformed(ActionEvent e){
		String c = e.getActionCommand();	//返回与此动作相关的命令字符串
		if(c.equals("C")){
			handleC();	//用户按了"C"键,清除全部!!
		}else if("0123456789.".indexOf(c) >= 0){	//indexOf 在字符串中查找子字符,返回第一个找到的索引位置,未找到返回-1
			handleNumber(c);	//用户按了数字或小数点键
		}else{
			handleOperator(c);	//用户按了运算符键
		}
	}
	
	// 初始化计算器的各种值
	private void handleC()
	{
		jtxtName.setText("0");
		firstDigit = true;
		operator = "=";
	}
	
	private void handleNumber(String button){
		if (firstDigit){
			jtxtName.setText(button);	//输入的是第一个数字,无需判断小数点
		}else if((button.equals(".")) && (jtxtName.getText().indexOf(".") < 0)){
			jtxtName.setText(jtxtName.getText() + ".");	//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面
		}else if(!button.equals("."))//   如果输入的不是小数点,则将数字附在结果文本框的后面
		{
			jtxtName.setText(jtxtName.getText() + button);
		}
		firstDigit = false;	//以后输入的肯定不是第一个数字了
	}
	
	private void handleOperator(String button){
		if(operator.equals("/")){	//除法运算
			//如果当前结果文本框中的值等于0
			if(getNumberFromText() == 0.0){
				operateValidFlag = false;	//操作不合法
				jtxtName.setText("除数不能为零");
			}else{
				resultNum /= getNumberFromText();
			}
		}else if(operator.equals("+")){		//加法运算
			resultNum += getNumberFromText();
		}else if(operator.equals("-")){		//减法运算
			resultNum -= getNumberFromText();
		}else if(operator.equals("*")){		//乘法运算
			resultNum *= getNumberFromText();
		}else if(operator.equals("=")){		//赋值运算
		    resultNum = getNumberFromText();
		}
		jtxtName.setText(String.valueOf(resultNum));	//将运算后结果重新赋给文本框
		operator = button; //运算符等于用户按的按钮
		firstDigit = true;
		operateValidFlag = true;
	}
	
	//从结果的文本框获取数字
	private double getNumberFromText()
	{
		double result = 0;
		try{
			result = Double.valueOf(jtxtName.getText()).doubleValue(); 
			//将jtxtName.getText()字符串转化为一个Double对象,然后调用这个对象的doubleValue方法返回对应double数值赋给result
		}catch(NumberFormatException e){
		}
		return result;
	}
	
	public static void main(String[] args){
		new window();
	}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值