⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calc.java

📁 计算 形如 1+2+(545.212-87987/5454)*45 运算符号只能是+-*/()这些
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package myfile;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.Color.*;
import java.awt.font.*;
import java.util.Random;

/**
*有需要的人可以联系本人qq:170900003
*or emailTO: chenquan9958@163.com
*本人自己做的 java表达式 计算器 带有界面的 
*可以 计算 形如 1+2+(545.212-87987/5454)*45
*运算符号只能是+-*/()这些
*暂时没做其他的比如cos sin tg ctg等,但是估计够用了 
*/
class DangBuCalc2 implements ActionListener{

	Frame f;int j=1;
 	Panel p1,p2;
	Label lab1,lab2;
	JTextArea tf1=new JTextArea(1,15);
	JLabel jlb1=new JLabel("式子");
 	TextField tf2,tf3;
	Button[] btn=new Button[17];
	Button btnmc,btnmr,btnms,btnmand,btnsqrt,btnmod,btndao,btnfuh;
	Button btnbackspace,btnc,btnout;

	double a1=0,a2;
	String ans,suans;
	String zifu[]=new String[100];
	double shuju[]=new double[100];
    
    //creat the pane
    void creat(){
   	Random r=new Random();
    int shu=1;
   
   f=new Frame("表达式运算器");
   f.setSize(240,300);
   p1=new Panel();p1.resize(new Dimension(290,30));
   p2=new Panel();p2.resize(new Dimension(290,30));
   lab2=new Label("结果");lab2.resize(10,10);
      
   tf1.setBackground(java.awt.Color.getHSBColor(77,33,22));
   tf1.resize(60,10);tf1.setFont(new Font("",java.awt.Font.BOLD,13));
   tf1.setForeground(java.awt.Color.RED);
   
   tf2=new TextField(19);tf2.setBackground(java.awt.Color.getHSBColor(77,33,22));
   tf2.resize(20,10);tf2.setText("0");
   tf3=new TextField(2);tf3.setBackground(java.awt.Color.getHSBColor(r.nextFloat(),r.nextFloat(),r.nextFloat()));
   tf3.resize(35,25);
 
   //name btn and set size and set others configure
   for(;shu<10;shu++) btn[shu]=new Button(""+shu);
   btn[10]=new Button("0");
   btn[11]=new Button(".");
   btn[12]=new Button("+");
   btn[13]=new Button("-");
   btn[14]=new Button("*");
   btn[15]=new Button("/");
   btn[16]=new Button("=");
   
   for(shu=1;shu<17;shu++){
   	btn[shu].resize(35,25);
   	btn[shu].setForeground(java.awt.Color.BLUE);
   }
   btnsqrt=new Button("sqrt");btnsqrt.resize(35,25);btnsqrt.setForeground(java.awt.Color.red);
   btnmod=new Button("%");btnmod.resize(35,25);btnmod.setForeground(java.awt.Color.red);
   btndao=new Button("1/x");btndao.resize(35,25);btndao.setForeground(java.awt.Color.red);
   btnfuh=new Button("+/-");btnfuh.resize(35,25);btnfuh.setForeground(java.awt.Color.red);
   btnmc=new Button("(");btnmc.resize(35,25);btnmc.setForeground(java.awt.Color.red);
   btnmr=new Button(")");btnmr.resize(35,25);btnmr.setForeground(java.awt.Color.red);
   btnms=new Button("M-");btnms.resize(35,25);btnms.setForeground(java.awt.Color.red);
   btnmand=new Button("M+");btnmand.resize(35,25);btnmand.setForeground(java.awt.Color.red);
   btnbackspace=new Button("Backspace");btnbackspace.resize(80,25);btnbackspace.setForeground(java.awt.Color.red);
   btnc=new Button("C");btnc.resize(35,25);btnc.setForeground(java.awt.Color.red);
   btnout=new Button("out");btnout.resize(60,25);btnout.setForeground(java.awt.Color.red);
    //name btn and set size and set others configure
   
  //add btn's ActionListener
  for(shu=1;shu<17;shu++){
  	btn[shu].addActionListener(this);
  }
   btnsqrt.addActionListener(this);
   btnmod.addActionListener(this);
   btndao.addActionListener(this);
   btnfuh.addActionListener(this);
   btnmc.addActionListener(this);
   btnmr.addActionListener(this);
   btnms.addActionListener(this);
   btnmand.addActionListener(this);
   btnbackspace.addActionListener(this);
   btnc.addActionListener(this);
   btnout.addActionListener(this);
   //add btn's ActionListener
   
   //set location for buttons and add them to f
   f.add(btnbackspace);btnbackspace.setLocation(20,100);
   f.add(btnout);btnout.setLocation(110,100);
   f.add(tf3);tf3.setLocation(180,100);
   
   f.add(btn[7]);btn[7].setLocation(20,130);
   f.add(btn[8]);btn[8].setLocation(60,130);
   f.add(btn[9]);btn[9].setLocation(100,130);
   f.add(btn[15]);btn[15].setLocation(140,130);
   f.add(btnsqrt);btnsqrt.setLocation(180,130);
   
   f.add(btn[4]);btn[4].setLocation(20,160);
   f.add(btn[5]);btn[5].setLocation(60,160);
   f.add(btn[6]);btn[6].setLocation(100,160);
   f.add(btn[14]);btn[14].setLocation(140,160);
   f.add(btnmod);btnmod.setLocation(180,160);
   
   f.add(btn[1]);btn[1].setLocation(20,190);
   f.add(btn[2]);btn[2].setLocation(60,190);
   f.add(btn[3]);btn[3].setLocation(100,190);
   f.add(btn[13]);btn[13].setLocation(140,190);
   f.add(btndao);btndao.setLocation(180,190);
   
   f.add(btn[10]);btn[10].setLocation(20,220);
   f.add(btn[11]);btn[11].setLocation(60,220);
   f.add(btnfuh);btnfuh.setLocation(100,220);
   f.add(btn[12]);btn[12].setLocation(140,220);
   f.add(btn[16]);btn[16].setLocation(180,220);
   
   
   f.add(btnmc);btnmc.setLocation(20,250);
   f.add(btnmr);btnmr.setLocation(60,250);
   f.add(btnms);btnms.setLocation(100,250);
   f.add(btnmand);btnmand.setLocation(140,250);
   f.add(btnc);btnc.setLocation(180,250);    
       
   //set location for buttons and add them to f
   p1.add(jlb1);p1.add(tf1);p2.add(lab2);p2.add(tf2);
   f.add(p1,"North");f.add(p2,"Center");
   f.setBackground(java.awt.Color.pink);
   f.setVisible(true);
   f.setResizable(false);
  // f.setDefaultClostOperation(EXIT_ON_CLOSE);
   }
   
    //check the input is accept or no 检测输入合法性
   	boolean check(String suans){
		boolean b=true;
		int LeftKNum=0,RightKNum=0;
		int i,j=0;
		//检验输入是否为空
		if(suans.length()<1){
		 	b=false;	    
     		tf2.setText("Error! Nothing !");
     	}
     	//检验输入是否为空
     	//检验输入的()个数是否匹配和是否有连续两个点
wrongInput:for(i=0;i<suans.length();i++){
     	//	System.out.println("正在记录()符号个数");
     		if( suans.substring(i,i+1).equals("(")){
     			LeftKNum++;
     			if( suans.substring(i+1,i+2).equals(".")||
     			    suans.substring(i+1,i+2).equals("+")||
     			    suans.substring(i+1,i+2).equals("*")||
     			    suans.substring(i+1,i+2).equals("/")){
     				tf2.setText("Error! '(.' or '(+' or '(*' or '(/' error !");
     				LeftKNum=RightKNum;
     				b=false;
     				break wrongInput;
     			}
     			
     		
     			
     		}
     		if( suans.substring(i,i+1).equals(")"))	{
     			if(b==true)
     			RightKNum++;
     		}
     		if( suans.substring(i,i+1).equals("."))	{
     			if( suans.substring(i+1,i+2).equals(".")){
     				tf2.setText("Error! Too many ... !");
     				b=false;
     			}	
     		}	
     	}
     	if (!(LeftKNum==RightKNum)) {
     		tf2.setText("Error! ( ) don't match !");
     		b=false;
     	}	
     	//检验输入的()个数是否匹配和是否有连续两个点
  		return b;
	}
	
	//消除算式中的()
    void	clear(String suans){
   		 int kuohao=0,khxiabiao=0;
   		 int i,j=0;
   		 int LeftKNum=0;
   		 String x;
   		 for(i=0;i<suans.length();i++){
   		 	if( suans.substring(i,i+1).equals("(")){
     			LeftKNum++;
     		}
     	 }	
   	   	 for(;j<LeftKNum;j++)  
   	   	 	 for(i=0;i<suans.length();i++){
				//	System.out.println("正在检查()符号");
	   				if( suans.substring(i,i+1).equals("(")){
					//	System.out.println("检查到(符号");
						khxiabiao=i;
						for(;i<suans.length();i++){
					 		if(suans.substring(i,i+1).equals("(")){
					 			khxiabiao=i;
					  		}
				  	   else if(suans.substring(i,i+1).equals(")")){
					//			System.out.println("检查到)符号");
								System.out.println(suans.substring(khxiabiao+1,i));
								x=jisuan(suans.substring(khxiabiao+1,i));
								System.out.println("x="+x);
								
								suans=suans.substring(0,khxiabiao)+x+suans.substring(i+1,suans.length());
								 
								System.out.println(suans);
								i=khxiabiao;
								break;
							}
				    	}	
					}
   				}	
    		jisuan(suans);
    	//	jta.append(tf1.getText()+"="+tf2.getText()+"\n");
     	 
	}
	 //表达式计算的方法
	String jisuan(String suans){
		int i,yxiabiao=0,dataXiaBiao=1,fuhaoNums=0,chengchuNums=0;//数据下标从1开始 字符则是从2开始
	
		//先提取符号前的数据和字符
		
/**************核心提取数据和符号的算法*************************
		 *没检测到符号就 i+1
		 *检测到有符号就存储之前的数据 再存储符号 
		 *接着记录符号个书和*\号个数 
		 *同时记录当前下标到yxiabiao中去 
		 *之后i+=2 就是跳个一个数检测下一个 这样速度更快*
		 *最后提取最后个符号之后的数据
		 
/**************核心提取数据和符号的算法*************************/		 
		for(i=0;i<suans.length();){
			if( suans.substring(i,i+1).equals("+") || suans.substring(i,i+1).equals("-") ||
			suans.substring(i,i+1).equals("*") || suans.substring(i,i+1).equals("/")){
				//判断第一个数据是否是-号
				if(!(i==0)){
				
					if(suans.substring(i,i+1).equals("*") || suans.substring(i,i+1).equals("/")){
						chengchuNums++;//记录/*个数
					}
					fuhaoNums++;	   //记录总符号数
					shuju[dataXiaBiao++]=Double.parseDouble(suans.substring(yxiabiao,i));	//存储数据到shuju中
					zifu[dataXiaBiao++]=suans.substring(i,i+1);								//把符号存到zifu中
					yxiabiao=i+1;
					i+=2; 
				}else {
					//第一个是-号后再判断第2个是否是-号 是的话忽略两个负号
					if( suans.substring(i+1,i+2).equals("-")){
						yxiabiao=i+2;
						i+=2;
					}else {
						i++;
					}
						
				}	
			}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -