用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - java代码库

java计算器

2014-02-21 作者: token举报

[java]代码库

/**
 * 计算器
 * @author 刘兴
 *
 */
public class Calculator extends JFrame implements ActionListener{
	
	//定义创建组件
	JTextField t=new JTextField(20);
	JButton[] b=new JButton[27];
	String[] s={"Backspace","CE","C",
				"MC","7","8","9","/","sqrt",
				"MR","4","5","6","*","%",
				"MS","1","2","3","-","1/x",
				"M+","0","+/-",".","+","="
				};
	JMenuBar jmb = new JMenuBar();
	JMenu jm1 = new JMenu("编辑(E)");
	JMenu jm2 = new JMenu("查看(V)");
	JMenu jm3 = new JMenu("帮助(H)");
	JMenuItem jmi1 = new JMenuItem("复制(C)");
	JMenuItem jmi2 = new JMenuItem("粘贴(P)");
    public Calculator() {
    	
    	this.setLayout(null);
    	this.add(t);
    	t.setHorizontalAlignment(JTextField.RIGHT);
    	t.setEditable(false);
    	t.setBounds(10,10,400,30);
    	
    	//添加按钮,同时注册监听
    	for(int i=0;i<27;i++){
    		b[i]=new JButton(s[i]);
    		b[i].addActionListener(this);//注册监听
    		b[i].setActionCommand(s[i]);
    		this.add(b[i]);
       	}
       	
    	//下面设置各个按钮之间的距离以及按钮的大小
    	//前三个按钮设置为大小100,30,间距为10
       	for(int i=0;i<3;i++){
       		b[i].setBounds(90+110*i,50,100,30);
       	}
       	
       	//剩余的按钮大小相同,只是间距有所不同
       	int n=3;
       	for(int i=0;i<4;i++){
       		for(int j=0;j<6;j++){
       			if((n-3)%6==0){
       				b[n].setBounds(10,90+35*i,60,30);
       			}else{
       				b[n].setBounds(90+65*(j-1),90+35*i,60,30);
       			}
       			n++;
       		}
       	}
       	
      //设置菜单
		this.setJMenuBar(jmb);
		jmb.add(jm1);
		jmb.add(jm2);
		jmb.add(jm3);
       	jmi1.setMnemonic('C');
       	jmi1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_C,InputEvent.CTRL_MASK));
       	jmi2.setMnemonic('V');
       	jmi2.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_V,InputEvent.CTRL_MASK));
       	jm1.add(jmi1);
       	jm1.add(jmi2);
       	jmi1.addActionListener(this);//注册菜单监听
       	jmi2.addActionListener(this);
       	jmi1.setActionCommand("copy");
       	jmi2.setActionCommand("paste");
      //设置窗体
  		this.setTitle("计算器");
  		ImageIcon icon = new ImageIcon("images/jisuan.jpg");
  		this.setIconImage(icon.getImage());
       	this.setSize(430,290);
       	this.setLocation(200,200);
       	this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       	this.setResizable(false);
    	this.setVisible(true);
    }
    
    public static void main(String[] args) {
    	new Calculator();
    }

	String text[] = {"",""} ;
	String showString = "";//要显示的字符串
	int dotCount = 0;//点击小数点的次数
	int j = 0;//用来表示是第几个操作数
	int op = -1; //操作类型,0:/;1:*;2:-;3:+;4:%
	int flag = 0;
	String copyedString = "";
	@Override
	public void actionPerformed(ActionEvent e) {
		String comand = e.getActionCommand();
		if("copy".equals(comand)){
			copyedString =  t.getText();
		}
		if("paste".equals(comand)){
			if(!("".equals(copyedString))){
				showString = copyedString;
				text[j] = copyedString;
			}
		}
		for(int i = 4; i<7; i++){ //点击7、8、9
			if(s[i].equals(comand)) text[j] += s[i];
			showString = text[j];
		}
		for(int i = 10; i<13; i++){//点击4、5、6
			if(s[i].equals(comand)) text[j] += s[i];
			showString = text[j];
		}
		for(int i = 16; i<19; i++){//点击1、2、3
			if(s[i].equals(comand)) text[j] += s[i];
			showString = text[j];
		}
		if(s[22].equals(comand)) {//点击0
			text[j] += s[22];
			showString = text[j];
		}
		if(s[24].equals(comand)){ //点击".",只允许点一次,点第二次不给反应
			if(dotCount == 0) {
				text[j] += s[24];
				showString = text[j];
				dotCount ++;
			}
		}
		if(s[7].equals(comand)){//点击"/"
				showString = operator();
				text[0] = showString;
				text[1] = "";
				op = 0;
				j = 1;//下面要换成text[1]来记录第二个操作数
		}
		if(s[13].equals(comand)){//点击"*",只能点一次
				showString = operator();
				text[0] = showString;
				text[1] = "";
				op = 1;
				j = 1;//下面要换成text[1]来记录第二个操作数
		}
		if(s[19].equals(comand)){//点击"-",只能点一次
				showString = operator();
				text[0] = showString;
				text[1] = "";
				op = 2;
				j = 1;//下面要换成text[1]来记录第二个操作数
		}
		if(s[25].equals(comand)){//点击"+",只能点一次
				showString = operator();
				text[0] = showString;
				text[1] = "";
				op = 3;
				j = 1;//下面要换成text[1]来记录第二个操作数
		}
		if(s[14].equals(comand)){//点击%
			if(j==0) {
				op = 4;
				j = 1;
			}
		}
		if(s[0].equals(comand)){//点击Backspace
			int len = text[j].length();
			if(len > 0){
				text[j] = text[j].substring(0,text[j].length()-1);
				showString = text[j];
			}
		}
		if(s[2].equals(comand)){//点击c
				text[j] = "";
				showString = "";
		}
		if(s[23].equals(comand)){//点击+/-
			if(flag == 0){
				text[j] = "-"+text[j];
				showString = text[j];
				flag = 1;
			}else if(flag==1){
				text[j] = showString.substring(1,showString.length());
				showString = text[j];
				flag = 0;
			}
			System.out.println("flag===="+flag);
    	}
		if(s[26].equals(comand)){//点击=
			showString = operator();
		}
		if(s[1].equals(comand)){//点击CE
			//此处直接将所有的数据全部恢复初始值,同时将文本框中的数值清空
			text[0] = "";
			text[1] = "";
			t.setText("");
			showString = "";
			dotCount = 0;
			op = -1;
			j = 0;
		}
		if(s[20].equals(comand)){//点击1/x
			if(!("".equals(text[j]))){
				double num = Double.parseDouble(text[j]);
				num = 1/num;
				text[j] = num+"";
				showString = num+"";
			}
		}
		if(s[8].equals(comand)){//点击sqrt
			if(!("".equals(text[j]))){
				double num = Double.parseDouble(text[j]);
				num = Math.sqrt(num);
				text[j] = dealResult(num+"");
				showString = text[j];
			}
		}

		t.setText(showString);
	}
	
	public String operator(){//进行计算
		if("".equals(text[1]) || "".equals(text[0])){
			return text[0];
		}
		double op1 = Double.parseDouble(text[0]);//得到第一个操作数
		double op2 = Double.parseDouble(text[1]);//得到第二个操作数
		double result = 0.0;
		//进行计算
		switch (op) {
		case 0://除
			if(op2 != 0){//除法时第二操作数不能是0
				result = op1 / op2;
			}
			break;
		case 1://乘
			result = op1*op2;
			break;
		case 2://减
			result = op1-op2;
			break;
		case 3://加
			result = op1 + op2;
			break;
		case 4:
			int mu1 = (int)op1;
			int mu2 = (int)op2;
			if((op1 == mu1) && (op1 == mu2)){//整除需要两个操作数都是整数
				result = (int)op1%(int)op2;
				System.out.println("zhen");
			}else{
				result = op2;
			}
			break;
		default:
			break;
		}
		String resString = result+"";
		resString = dealResult(resString);
		return resString;
	}
	
	String dealResult(String resString){
		int dotpos = resString.indexOf(".");
		if(resString.substring(dotpos+1, resString.length()).equals("0")){
			resString = resString.substring(0,dotpos);
		}
		return resString;
	}
}


网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。


扫码下载

加载中,请稍后...

输入口令后可复制整站源码

加载中,请稍后...