JAVA编写计算器

用JAVA编写一个实现加减乘除运算的计算器

1.实现加减乘除以及乘方运算;
2.C是清除键,清除之前输入所有数据,计算结果归零。
3.CE也是清除键,清除上一个输入的数据。

思路就是创建一个窗口,然后给窗口添加容器或组件,然后给组件添加监视器,检测事件的发生,然后进行相应的事件处理。
主要知识点:窗口建立,添加组件,布局,事件处理。

图片:在这里插入图片描述

PS:总的来说这是java的入门,初学者的话遇到这个实验不要慌,没有多难。其实就相当于修房子一样,你首先得打地基(这里就是窗口),然后在这个基础上添砖加瓦(这里可以当做容器和组件)。弄好以后根据你的需求让房子里面的器件实现你的功能,给电器(组件)安装一个开关,当你按下开关以后就根据相应操作做出相应的反应(就是给事件源添加一个监视器,一旦监视器监视到事件源做出反应,就进行相应的事件处理)。

来吧,见代码:


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

public class CaculatorDemo {
	public static void main(String[] args) {
		JS win=new JS();
	}
}
class JS extends JFrame implements ActionListener{
	private StringBuilder sBuilder = new StringBuilder();  //利用StringBuilder类来显示,以及区分两个操作数
	JTextArea text=new JTextArea();
	double a,b;
	Double sum;
	int i;
	public JS()
	{
		setBounds(100,100,400,400);
		setTitle("计算器");
		JMenuBar menubar=new JMenuBar();//创建菜单条
		JMenu menu1=new JMenu("查看(V)");//创建和设置菜单名
		JMenu menu2=new JMenu("编辑(E)");//创建和设置菜单名
		JMenu menu3=new JMenu("帮助(H)");//创建和设置菜单名
		menubar.add(menu1);//将菜单加入到菜单条中
		menubar.add(menu2);
		menubar.add(menu3);
		this.setJMenuBar(menubar);//将设置好的菜单条放在窗口中
		this.setLayout(new BorderLayout());//添加文本框
		JPanel p1=new JPanel();
		JPanel p2=new JPanel();
		text.setPreferredSize(new Dimension (370,60));//设置组件大小
		p2.setLayout(new FlowLayout());
		p1.add(text);
		this.add(p1,BorderLayout.NORTH);
		
		
		p2.setLayout(new GridLayout(5,4));	//添加按钮
		JButton button[]=new JButton[20];
		button[0]=new JButton("C");		//清空
		button[1]=new JButton("CE");	//清除之前输入的一个数据
		button[2]=new JButton("%");		//取余
		button[3]=new JButton("÷");   //除法
		button[4]=new JButton("7");
		button[5]=new JButton("8");
		button[6]=new JButton("9");
		button[7]=new JButton("x");  //乘号
		button[8]=new JButton("4");
		button[9]=new JButton("5");
		button[10]=new JButton("6");
		button[11]=new JButton("—");  //减号
		button[12]=new JButton("1");
		button[13]=new JButton("2");
		button[14]=new JButton("3");
		button[15]=new JButton("+");  //加号
		button[16]=new JButton("e");	//乘方
		button[17]=new JButton("0");
		button[18]=new JButton(".");  //小数点
		button[19]=new JButton("="); //等于
		
		for(int i=0;i<button.length;i++ )	//将组件加入容器
			p2.add(button[i]);
		button[19].setBackground(Color.ORANGE);//设置按钮的背景颜色为橙色
		p2.add(button[19]);
		add(p2,BorderLayout.CENTER);
		
		for(int i=0;i<button.length;i++)	//为每一个事件(按钮)添加监视器
			button[i].addActionListener(this);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //点击X号可以关闭程序
	}
	
	public void actionPerformed(ActionEvent e) //事件处理
	{
		// TODO Auto-generated method stub
		String lab=e.getActionCommand();			//得到当前的按钮字符,后面进行匹配
		
		if(lab.equals("0"))								//处理按钮 0~9
		{
			sBuilder.append("0");		//利用StringBuilder类的对象调用方法,将数据存起来
			text.setText(sBuilder.toString());	//显示之前所有输入的数据
		}
		else if(lab.equals("1"))
		{
			sBuilder.append("1");		//利用StringBuilder类的对象调用方法,将数据存起来			
			text.setText(sBuilder.toString());	//显示之前所有输入的数据	
		}
		else if(lab.equals("2"))
		{
			sBuilder.append("2");		//利用StringBuilder类的对象调用方法,将数据存起来
			text.setText(sBuilder.toString());	 //显示之前所有输入的数据
		}
		else if(lab.equals("3"))
		{
			sBuilder.append("3");		//利用StringBuilder类的对象调用方法,将数据存起来
			text.setText(sBuilder.toString());	//显示之前所有输入的数据
		}
		else if(lab.equals("4"))
		{
			sBuilder.append("4");					
			text.setText(sBuilder.toString());	
		}
		else if(lab.equals("5"))
		{
			sBuilder.append("5");				
			text.setText(sBuilder.toString());	
		}
		else if(lab.equals("6"))
		{
			sBuilder.append("6");				
			text.setText(sBuilder.toString());	
		}
		else if(lab.equals("7"))
		{
			sBuilder.append("7");					
			text.setText(sBuilder.toString());	
		}
		
		else if(lab.equals("8"))
		{
			sBuilder.append("8");						
			text.setText(sBuilder.toString());	
		}
		else if(lab.equals("9"))
		{
			sBuilder.append("9");		//利用StringBuilder类的对象调用方法,将数据存起来		
			text.setText(sBuilder.toString());	//显示之前所有输入的数据
		}
		
		else if(lab.equals("CE"))    				//处理"CE"按钮事件   即清除当前的输入的数据
		{
			sBuilder.deleteCharAt(sBuilder.length() - 1);	//StringBuilder的实例化对象调用方法下标减1即可
			text.setText(sBuilder.toString());
		}
		else if(lab.equals("C"))                   //处理"CE"按钮事件   即清除之前的输入所有的数据
		{
			sBuilder = new StringBuilder();						//重新创建即可清除之前的输入所有的数据
			text.setText(sBuilder.toString());
		}
		else if(lab.equals("."))						// 处理按钮 "." 事件
		{
			sBuilder.append(".");						//利用StringBuilder类的对象调用方法,将数据存起来
			text.setText(sBuilder.toString());			//显示之前输入的数据
		}
		
		else if(lab.equals("+"))	//处理+"按钮乘法
		{
			a = Double.parseDouble(sBuilder.toString());	//将 运算符 之前的数据 作为第一个操作数 a
			i=0;
			sBuilder = new StringBuilder();					//将数组清空来存储第二个操作数 b
			text.setText("+");
		}
		else if(lab.equals("—"))		//处理"—"按钮乘法
		{
			a = Double.parseDouble(sBuilder.toString());	//将前面的输入的数 作为第一个操作数a
			i=1;												//标记运算类型  即"÷"之前的数据即将作为因数
			sBuilder = new StringBuilder();					//将数组清空来存储第二个操作数 b									
			text.setText("—");
		}
		else if(lab.equals("x"))    	//处理"x"按钮乘法
		{										
			a = Double.parseDouble(sBuilder.toString());	//将前面的输入的数 作为第一个操作数a
			i=2;											//标记运算类型  即"÷"之前的数据即将作为因数
			sBuilder = new StringBuilder();					//将数组清空来存储第二个操作数 b
			text.setText("x");
		}
		else if(lab.equals("÷"))		//处理"÷"按钮事件
		{
			i=3;											//标记运算类型  即"÷"之前的数据即将作为被除数
			a = Double.parseDouble(sBuilder.toString());	//将除法的输入的数 作为第一个操作数a
			sBuilder = new StringBuilder();					//将数组清空来存储第二个操作数 b
			text.setText("÷");
		}
		
		else if(lab.equals("%"))	//处理取余运算
		{
			a = Double.parseDouble(sBuilder.toString());	//将前面的输入的数 作为第一个操作数a
			i=4;											//标记取余运算
			sBuilder = new StringBuilder();					//将数组清空来存储第二个操作数 b
			text.setText("%");
		}
		else if(lab.equals("e"))	//处理取余运算
		{
			a = Double.parseDouble(sBuilder.toString());	//将前面的输入的数 作为第一个操作数a
			i=5;											//标记取余运算
			sBuilder = new StringBuilder();					//将数组清空来存储第二个操作数 b
			text.setText("e");
		}
		else if(lab.equals("="))
		{
			b = Double.parseDouble(sBuilder.toString());	//一遇到"=",我们就能得到第二个操作数b
			if (i == 0)			//加法 a+b
				{
					sum=a+b;
					text.setText(sum.toString());		//输出第二个操作数已经输入的数据
					sBuilder = new StringBuilder();		//清空数据,为后面的操作数留空间
					sBuilder.append(sum);
				} 
			else if (i == 1) 	//加法  a-b
				{
					sum = a - b;
					text.setText(sum.toString());
					sBuilder = new StringBuilder();		//清空数据,为后面的操作数留空间
					sBuilder.append(sum);
				}
			else if (i == 2) 	//乘法  a*b
				{
					sum = a * b;
					text.setText(sum.toString());
					sBuilder = new StringBuilder();
					sBuilder.append(sum);
				} 
			else if (i == 3) 	//除法 a÷b
				{
					sum = a / b;
					text.setText(sum.toString());
					sBuilder = new StringBuilder();
					sBuilder.append(sum);
				} 
			else if (i == 4)	 //	取余      a%b
				{
					sum=a % b;
					int m=(int)a;
					int n=(int)b;
					sum=(double)m % n;
					text.setText(sum.toString());
					sBuilder = new StringBuilder();
					sBuilder.append(sum);
				} 
			else if (i == 5) 	//	次幂      a是底数	 b是指数
			 {
				 sum=1.0;
				 if(b==0)
					 sum=1.0;
				 else
					 for(int i=1;i<=b;i++)
					  sum=sum*a;
					text.setText(sum.toString());
					sBuilder = new StringBuilder();
					sBuilder.append(sum);
				} 
			 else 
				text.setText(sBuilder.toString());
		}
	}
}





  • 122
    点赞
  • 557
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值