Java编写的简易计算器

一般来说,刚开始学习Java比较适合做一些小的东西,比如计算器、图书管理系统什么的,这样会学的稍微快一些。而我这个计算器正适合新手参考,为什么?因为我也是新手。虽说代码比较烂,但是很…

我先说下大致思路:第一步是先把界面写出来,第二步是对界面的各个按钮实现监听。实现等号这个功能复杂一些,不过还可以理解

看一下效果图(我是在网上找一个图片,然后照着图片做的界面)
在这里插入图片描述
源码链接: https://pan.baidu.com/s/1mXCmbjGklwsC7-UlTcxTew
提取码:yab3

tip:下载后,解压一下,然后百度下eclipse怎么导入项目导入就好了。
或者是看下边的两段。

在这里插入图片描述

CalMain类和main方法

public class CalMain {
    
    
	public static void main(String[] args) {
    
    
		Calculate.Calculate();
	}
}

Calculate类和CalCulate方法

import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calculate extends JFrame {
    
     

	private static final long serialVersionUID = 1L;

	public static void Calculate() {
    
    
			
		JFrame frame = new JFrame("简易计算器");			
		frame.setBounds(650, 250, 385, 645);
	
		JPanel panel = new JPanel();
		
		JTextField textfield = new JTextField();
		textfield.setPreferredSize(new Dimension(355,100));
      
		JButton button[] = new JButton [20];
		 
		StringBuffer s = new StringBuffer();//StringBuffer 允许对字符串多次修改,不产生新的未使用对象,定义s

		//添加数字按钮
		//setBound(a,b,width,height) 窗口初始位置(a,b),宽是width,高是height
		 
		button[1] = new JButton("7");		
		button[2] = new JButton("8");
		button[3] = new JButton("9");
		button[4] = new JButton("/");
		
		button[5] = new JButton("4");
		button[6] = new JButton("5");
		button[7] = new JButton("6");
		button[8] = new JButton("*");
		
		button[9] = new JButton("1");		
		button[10] = new JButton("2");
		button[11] = new JButton("3");
		button[12] = new JButton("-");
		
		button[13] = new JButton(".");
		button[14] = new JButton("0");
		button[15] = new JButton("=");
		button[16] = new JButton("+");
		
		button[17] = new JButton("清空");		
		button[18] = new JButton("退格");
		
		textfield.setFont(new Font("宋体",Font.CENTER_BASELINE,25));
		panel.add(textfield);
		
		for(int i=17;i<=18;i++) {
    
    
			button[i].setPreferredSize(new Dimension(175, 100));
			button[i].setFont(new Font("宋体",Font.CENTER_BASELINE,25));
			panel.add(button[i]);
		}	
		
		for(int i=1; i<=16;i++) {
    
    				
			button[i].setPreferredSize(new Dimension(85,90));
			button[i].setFont(new Font("宋体",Font.CENTER_BASELINE,25));
			 panel.add(button[i]);		  
		}
	 
		 //监视器,处理事件源并显示到文本框
		 button[1].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("7");	//StringBuffer.append() 是创建一个新数组,扩大了长度,把需要添加的字符串复制到里面去
				 String str = s.toString();
				 textfield.setText(str);
			 }		 
		 } );
		 button[2].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("8");	
				 String str = s.toString(); 
				 textfield.setText(str);
			 }		 
		 } );
		 button[3].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("9");		
				 String str = s.toString(); 
				 textfield.setText(str);
			 }		 
		 } );
		 button[4].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 
				 if(s.length()!=0) {
    
     //第一个数不能是除号
					 
					 int length = s.length();
					 String over = s.substring(length-1, length);
					
					 if(!("/".equals(over))) {
    
     //不能续输入两个除号
						 s.append("/");			 
						 String str = s.toString(); 
						 textfield.setText(str);
					 }
				 }
			 }		 
		 } );
		 button[5].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("4");	
				 String str = s.toString(); 
				 textfield.setText(str);
			 }		 
		 } );
		 button[6].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("5");	
				 String str = s.toString(); 
				 textfield.setText(str);
			 }		 
		 } );
		 button[7].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("6");	
				 String str = s.toString();
				 textfield.setText(str);
			 }		 
		 } );
		 
		 button[8].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    
				 if(s.length()!=0) {
    
      //第一个数不能是乘号
					 int length2 = s.length();
					 String over2 = s.substring(length2-1, length2);
					
					 if(!("*".equals(over2))) {
    
     //不能续输入两个乘号
					 s.append("*");	
					 String str = s.toString();
					 textfield.setText(str);
					 }
				 }
			 }		 
		 } );
		 button[9].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("1");	
				 String str = s.toString();
				 textfield.setText(str);
			 }		 
		 } );
		 button[10].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("2");	
				 String str = s.toString(); 
				 textfield.setText(str);
			 }		 
		 } );
		 button[11].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("3");	
				 String str = s.toString(); 
				 textfield.setText(str);
			 }		 
		 } );
		 button[12].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    	
				 if(s.length()==0) {
    
     //输入第一个减号
					 s.append("-");	
					 String str = s.toString(); 
					 textfield.setText(str);
				 } else {
    
     //从第二个数开始,不能连续输入两个减号
					 int length3 = s.length();
					 String over3 = s.substring(length3-1, length3);
					
					 if(!("-".equals(over3))) {
    
     //不能续输入两个减号
						 s.append("-");	
						 String str = s.toString(); 
						 textfield.setText(str);
					 }
				 }

			 }		 
		 } );
		 button[13].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append(".");	
				 String str = s.toString(); 
				 textfield.setText(str);
			 }		 
		 } );
		 button[14].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    			
				 s.append("0");
				 String str = s.toString(); 
				 textfield.setText(str);
			 }		 
		 } );

		 button[16].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    
				if(s.length()==0) {
    
     //输入第一个加号
					s.append("+");	
					String str = s.toString(); 
					textfield.setText(str);
				} else {
    
     //从第二个数开始,不能连续输入两个加号
					int length4 = s.length();
					String over4 = s.substring(length4-1, length4);
				
					if(!("+".equals(over4))) {
    
     //不能续输入两个加号
						s.append("+");				
						String str = s.toString(); 
						textfield.setText(str);
					}
				}
			 }		 
		 } );
	 
		 //按钮‘清空’,监听到按钮后清空
		 button[17].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    
				 textfield.setText("");
				 s.delete(0, s.length());
			 }
		 });
		 //按钮‘退格’,监听到按钮后退格
		 button[18].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    
				if(s.length()!=0) {
    
    //只有在s字符串不为空时才可以退格
				s.delete(s.length()-1, s.length());
				String str = s.toString();
				textfield.setText(str);
				}
			 }
		 });
		 
		 //点击按钮"=",将计算结果
		 button[15].addActionListener(new ActionListener() {
    
    
			 public void actionPerformed(ActionEvent e) {
    
    
				 if(s.length()!=0) {
    
     //第一个数不能是等号			 
				 String ss = null;
				 
				 //判断是用GUI页面输入,如果是符号加数字,前补零,并把值赋值给ss
				 if(s.toString().length() != 0) {
    
    
					 
					 if(s.toString().length() == 2 ) {
    
    						 
							 ss = s.insert(0, 0).toString();							 
						 } 	else {
    
    
							 ss = s.toString();
						 }
					 
				 }  else {
    
     //判断是用键盘输入,如果是符号加数字,前补零,并把输入的值赋给ss
					 
					 if(textfield.getText().toString().length() == 2) {
    
    
						 
						 StringBuffer stbu = new StringBuffer(textfield.getText());
						 ss = stbu.insert(0,0).toString();
						 
						 } 	else {
    
    
							 ss = textfield.getText().toString();
						 }					
				 }
				 
				 String index = "[-]|[+]|[/]|[*]";
				 String number[] = ss.split(index);//split()方法,是根据给定的正则表达式分割字符串
				 int count = number.length;//count记录被分割几段
				 
				 if(count>2) {
    
     //因为不能连续计算,所以count>2时,即超过2个数运算,返回错误信息
					 textfield.setText("暂未实现连续计算");
					 
				 } else {
    
     //只有两个数运算时
					 Double num[] = new Double[count];
					 for(int i = 0; i<count; i++) {
    
    
						 num[i] = Double.parseDouble(number[i]);
					 }
					 			 
					 double result = 0;
					 
					 if(ss.contains("*")) {
    
    
						 result = num[0];
	
							 for(int i=1; i<count; i++) {
    
    
								 result*=num[i];
							 }
					 } 				 
					 if(ss.contains("/")) {
    
    
						 result = num[0];
	
							 for(int i=1; i<count; i++) {
    
    
								 if(num[i]==0) {
    
    
									 textfield.setText("出错");
									 return;
								 }
								 else {
    
    
									 result/=num[i];					 
								 }
						   } 				 
					 }
					 if(ss.contains("-")) {
    
    
						 result = num[0];
						
							 for(int i=1; i<count; i++) {
    
    
								 result-=num[i];
							 }				 
					 } 
					 
					 if(ss.contains("+")) {
    
    
						 result = num[0];
					
							 for(int i=1; i<count; i++) {
    
    
								 result+=num[i];
							 }
					 } 
					
					 textfield.setText(ss+"="+result);
				 }	
			     }
			 }
		 });  	 	
		 frame.add(panel);
		 frame.setVisible(true); //窗口可见
		 frame.setResizable(false);
		 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);; //可放大或者关闭窗口
	}
} 

猜你喜欢

转载自blog.csdn.net/qq_42524288/article/details/100986752