简单计算器的功能实现

简单计算器的功能实现,无不就是只有“+ - * /”加减乘除 这四个功能,而且同时由于该计算器很简单可以说用“弱智”来形容。为什么呢,因为它每次只能进行单个运算,例如:12*2-1= ,它只能运算2-1 所以最后答案等于1。因为我是在 输入“=”时才实现“=”前的运算符 的运算。

那些界面(ui)设置的什么就不说了,下面我们主要来分析一下简单计算器逻辑实现大概的思路:

1.首先先要想到要实现这些功能需要哪些属性,它要实现运算 那必须得是两个数对吧 所以要定义num1,num2(double),两个数有了那么我要怎么获取它们并且怎么显示,所以又要定义一个字符串s(String)和一个文本框t(JTextField)。当然你获取到的是字符串所以要转换为double类型的数据 num = Double.parseDouble(s); 。到这里基本需要用到的属性都定义的差不多了,后面我们遇到在进行补充定义。

2.比如说我要实现加法运算 我先给文本框里输入一个数 61,那么就将 61赋给num1 (num1 = Double.parseDouble(s);)注意我是在输入运算符之前给num1赋的值。当我又输入运算时 清空文本框(t.setText("");),然后我输入num2的值 再输 “=” 将前面文本框内容清空 然再得出运算结果。那么这个加法功能具体怎么实现,我这里是按照我自己个人的意愿,在输入等号“=”的时候 才进行等号前面还未处理的运算,我给这些运算符 用一个变量 x 来编号0 1 2 3对应+ - * /。然后再在 “=” 功能里面用switch(x)来实现前面我在文本框里面输入的“数 + 运算符 + 数”的运算。

3.在下面代码中我定义了一个btnC (JButton)按钮 该按钮呢就只实现一个简单的功能那就是手动清空文本框。

全部代码如下:

package ui;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;
public class CalculatorUI extends JFrame implements ActionListener{	
	//属性
	JTextField t = null;
	JButton btnC;
	double num1,num2;
	String s;
	int x;
	public CalculatorUI(){
			//设置标题以及窗口大小位置
			setTitle("计算器1.0"); 
			setSize(200,300);
			setLocationRelativeTo(null); //位置居中
			//设置默认的退出方式
			setDefaultCloseOperation(EXIT_ON_CLOSE);
			//获取内容面板
			Container contentpane = this.getContentPane();
			//设置布局方式
			contentpane.setLayout(new BorderLayout());
			
			//单独处理North布局
			JPanel pnlNorth = new JPanel();
			pnlNorth.setPreferredSize(new Dimension(0, 60));//设置North布局的大小
			pnlNorth.setLayout(new BorderLayout()); //设置North的布局方式为 边界布局
			contentpane.add(BorderLayout.NORTH,pnlNorth);
			
			//定义一个文本框 并且加入到North的内容面板的Center区域
			t = new JTextField();
			t.setFont(new java.awt.Font("宋体",Font.PLAIN,15)); //设置字体为‘宋体’大小为25
			pnlNorth.add(BorderLayout.CENTER,t);
			
			//定义一个按钮C(clean)加入到 North 内容面板的  EAST 区域
			btnC = new JButton("C");
			btnC.setFont(new java.awt.Font("宋体",Font.PLAIN,15)); //设置字体
			pnlNorth.add(BorderLayout.EAST,btnC);
			
			//单独处理Center布局
			JPanel pnlCenter = new JPanel();
			pnlCenter.setLayout(new GridLayout(4,0,3,3)); //设置Center的布局方式为网格布局
			contentpane.add(BorderLayout.CENTER,pnlCenter);
			String[] member = {
							"7","8","9","+",
							"4","5","6","*",
							"1","2","3","-",
							"/","0",".","="
			};
			
			btnC.addActionListener(this);

			for(int i=0;i<member.length;i++)
			{
				JButton btn = new JButton(member[i]);
				btn.setFont(new java.awt.Font("宋体",Font.PLAIN,15)); //设置字体  使用方法  .setFont(new java.awt.Font("字体",Font.PLAIN,字号))
				pnlCenter.add(btn);
				//为每个按钮注册监听器
				btn.addActionListener(this);
			}
		}
	public static void main(String[] args) {
		JFrame frame = new CalculatorUI();
		frame.setVisible(true); //将窗口设置为可实现化的
	}
	
	// 监听器 所有的监听事件 汇总
	public void actionPerformed(ActionEvent event) {
		//按钮C的功能 (清空)
		if(event.getActionCommand().equals("C"))
			t.setText(""); 
		//按钮 + 的功能 
		else if (event.getActionCommand().equals("+")) {
			s = t.getText();
			num1 = Double.parseDouble(s);//Double.parseDouble(String s),注意参数是String类型的,不然它是不能转换为Double的
			t.setText("");				 //补充:如果要变成int,则用Integer.parseInt() 参数同上。
			x=0; 
		}
		//按钮 - 的功能
		else if (event.getActionCommand().equals("-")) {
			s = t.getText();
			num1 = Double.parseDouble(s);//Double.parseDouble(String s),注意参数是String类型的,不然它是不能转换为Double的
			t.setText("");
			x=1;
		}
		//按钮 * 的功能
		else if (event.getActionCommand().equals("*")) {
			s = t.getText();
			num1 = Double.parseDouble(s);//
			t.setText("");
			x=2;
		}
		//按钮 / 的功能
		else if (event.getActionCommand().equals("/")) {
			s = t.getText(); 
			num1 = Double.parseDouble(s);//
			t.setText("");
			x=3;
		}
		//按钮  = 的功能
		else if (event.getActionCommand().equals("=")) {
			s = t.getText();
			num2 = Double.parseDouble(s);//
			//x时用来辨别 = 是用来实现 哪个按钮的运算
			switch (x) {
			case 0: t.setText("" + (num1 + num2));break; //实现按钮+的加法运算
			case 1: t.setText("" + (num1 - num2));break; //实现按钮-的减法运算
			case 2: t.setText("" + (num1 * num2));break; //实现按钮*的乘法运算
			case 3: t.setText("" + (num1 / num2));break; //实现按钮/的除法运算
			}
		}
		//输入小数时 小数点 . 的功能
		else if (event.getActionCommand().equals(".")) {
			if(t.getText().trim().indexOf('.') != -1)  //getText().trim()的作用是:在获得的文本中除去空格. 
			{}										   //indexOf方法获取到指定的字符在字符串中第一次出现的位置,如果该方法不返回-1 就证明该字符串中含有'.'字符。
			else
			{
				s = t.getText();
				s = s + event.getActionCommand();
				t.setText(s);
			}
		}
		//其他数字按钮的功能  获得相应按钮的数字
		else {
			String s = t.getText();
			s = s+event.getActionCommand();
			t.setText(s);
		}
	}

}

补充:

1.Double.parseDouble(String s),注意参数是String类型的,不然它是不能转换为Double的,如果要变成int,则用Integer.parseInt() 参数同上。

2.getText().trim()的作用是:在获得的文本中除去空格. 

3.indexOf方法获取到指定的字符在字符串中第一次出现的位置,如果该方法不返回-1 就证明该字符串中含有'.'字符。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值