亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? expressionanalyze.java

?? 一個關于公式分析得java小程序
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
//ExpressionsAnalyze.java - 計算公式分析
/*
關于與用法的例子如下:
String expression = "num1 * num2 -num3/num1";
try{
 	ExpressionAnalyze analyze = new ExpressionAnalyze(expression,12,10,6);
	catch(Exception e){
	System.out.println(e.toString());
}
double temp = analyze.getResult();
System.out.println(temp);

需要注意的問題:
	1.	一定要用try----catch語句;
	2.	目前構造函數可以有四種情況:
		a.	只有一個參數,用于接收公式,如  ExpressionAnalyze("abs(36-56)+90");
		b.	兩個參數,第一個用于接收公式,第二個用于接收傳值參數的值,
			如  ExpressionAnalyze("cos(num)+45",926);
		c.	三個參數,第一個用于接收公式,另外兩個用于接收傳值參數的值,
			如ExpressionAnalyze("cos(num)+flag",26,36);
		d.	四個參數,第一個用于接收公式,另外三個用于接收傳值參數的值,
			如ExpressionAnalyze("cos(num)+num1*num2",6,10,32);
	3.	所有的輸入值和返回值均用double類型以提高精度;
	4.	公式中可以包含空格,ExpressionAnalyze 中包含有處理空格的 method 清除其中的空格;
	5.	目前支持的運算符包括 +   -   *   /   (   )   %(求余數)  abs(求絕對值) 
		acos(反余弦) asin(反正弦) atan(反正切)  cbrt(開立方) 
		ceil(求比被操作數大的最小整數) cos(余弦) cosh(雙曲余弦函數) 
		exp(求ex ) floor(求比操作數小的最大整數) expm1(返回ex -1) 
		log(求以e為底的對數) log10(求以10為底的對數) log1p(返回1和被操作數和的自然對數) 
		rint(返回和被操作數最接近的整數的double形式) round(四舍五入,返回long) 
		signum(正負號函數) sin(正弦函數) sinh(雙曲正弦) sqrt(開平方) 
		tan(正切) tanh(雙曲正切) toDegrees(將弧度轉化為角度) 
		toRadians(將角度轉化為弧度)共 31 種,并且括號可以嵌套使用。
		各種運算符的意義:
	6.	負號"-"也可以正常使用,不過在使用中被操作數要加括號,如  (-5);
		但是公式開頭的符號可以不帶括號,如 expression = "-cos(PI)+E";
	7.	目前支持的常量包括:
		a.	自然對數的底 "e",所用的符號為 "E"
		b.	圓周率 "∏" ,所用的符號為 "PI"用法如  expression = "5 + cos (PI)";
	8.	公式中也支持科學技術法,如 12.3e6  或者 12.3E6
*/

package ddpie.expressionanalyze;
public class ExpressionAnalyze {
	//接受一個表達式參數的構造函數
	public ExpressionAnalyze(String expr) throws Exception{
		this.expr = expr;
		numOfParameter = 0;
		try{
			clearBlank();
			seekOutElem();
			compute();	
		}
		catch (Exception e){
			throw new Exception(e.toString());
		}
	}
	//接受一個表達式參數、一個傳值參數的構造函數
	public ExpressionAnalyze(String expr,double value1) throws Exception{
		this.expr = expr;
		numOfParameter = 1;
		this.value1 = value1;
		try{
			clearBlank();
			seekOutElem();	
			compute();
		}
		catch (Exception e){
			throw new Exception(e.toString());
		}
	}
	//接受一個表達式參數、兩個傳值參數的構造函數
	public ExpressionAnalyze(String expr,double value1,double value2)
	  throws Exception
	{
		this.expr = expr;
		numOfParameter = 2;
		this.value1 = value1;
		this.value2 = value2;
		try{
			clearBlank();
			seekOutElem();
			compute();
		}
		catch (Exception e){
			throw new Exception(e.toString());
		}
	}
	//接受一個表達式參數、三個傳值參數的構造函數
	public ExpressionAnalyze(String expr,double value1,double value2,double value3)
	  throws Exception
	{
		this.expr = expr;
		numOfParameter = 3;
		this.value1 = value1;
		this.value2 = value2;
		this.value3 = value3;
		try{
			clearBlank();
			seekOutElem();
			compute();
		}
		catch (Exception e){
			throw new Exception(e.toString());
		}
	}
	//清除expr中的空格
	private void clearBlank() throws Exception{
		//清除expr末尾的空格
		expr = expr.trim();
		char [] exprArray = new char[expr.length()];
		//將expr中的元素復制到數組exprArray中
		for(int i = expr.length()-1;i >= 0;i--)
			exprArray[i] = expr.charAt(i);
		//逐個將空格清除
		for(int i = expr.length()-1;i >= 0;i--){
			int j;
			if(exprArray[i] ==' '){
				j = i;
				while(j < exprArray.length - 1){
					exprArray[j] = exprArray[j + 1];
					j++;	
				}
				exprArray[exprArray.length - 1] = ' ';
			}
		}
		//將數組形式轉換成StringBuffer形式
		StringBuffer exprStrBuf = new StringBuffer("");
		for(int i = 0;i < exprArray.length;i++){
			exprStrBuf.insert(i,exprArray[i]);	
		}
		//將StringBuffer形式轉換成String形式
		expr = exprStrBuf.toString().trim();
		if(expr.length() == 0)
			throw new Exception("the length of the expression is 0");
	}
	//將字符串中的變量、常量、運算符挑出
	private void seekOutElem() throws Exception{
		int minLocation;
		int startPoint = 0;
		boolean isKeyword;
		do{
			minLocation = expr.length();
			isKeyword = false;
			for(int i = 0;i < keywords.length;i++) {
				int kwdLocation = expr.substring(startPoint).indexOf(keywords[i]);
				if(kwdLocation == -1)
					kwdLocation = expr.length();
				else 
					kwdLocation += startPoint;
				//如果是運算符
				if(kwdLocation == startPoint && 
				  	(keywords[i].equals("(") || 
				  	 keywords[i].length() == 1 ||
			   		 expr.charAt(startPoint + keywords[i].length()) == '('
				   	)
				  )
				{
					//如果鏈表為空
					if(elemList == null){
						elemList = new ElemList (keywords[i]);
						current = elemList;
						current.isOperator = true;	
					}
					//如果鏈表不空
					else{
						current.next = new ElemList (keywords[i]);
						current = current.next;
						current.isOperator = true;	
					}
					isKeyword = true;
					break;
				}
				if(minLocation > kwdLocation)
					minLocation = kwdLocation;
			}
			//如果不是運算符
			if(!isKeyword){
				//如果鏈表為空
				if(elemList == null){
					elemList = new ElemList (expr.substring(startPoint,minLocation));
					current = elemList;	
					current.isOperator = false;
				}
				//如果鏈表不空
				else{
					current.next = new ElemList (expr.substring(startPoint,minLocation));	
					current = current.next;
					current.isOperator = false;
				}
			}
			startPoint += current.data.length();
		}while(startPoint < expr.length());
		//公式末尾添加"#"
		current.next = new ElemList ("#");
		current = current.next;
		current.isOperator = true;
	}
	//計算最終的結果
	private void compute() throws Exception{
		//處理公式開頭的負號
		if(elemList.data.equals("-")){
			ElemList temp = new ElemList ("0");
			temp.next = elemList;
			elemList = temp;
		}
		for(current = elemList;current.next != null;current = current.next){
			//處理負號
			if(current.data.equals("(") && current.next.data.equals("-")){
				ElemList temp = new ElemList ("0");
				temp.next = current.next;
				current.next = temp;
			}
			//處理常量自然對數的底 e
			else if(current.data.equals("E"))
				current.data = (new Double(Math.E)).toString();
			//處理常量圓周率
			else if(current.data.equals("PI"))
				current.data = (new Double(Math.PI)).toString();
		}
		//找出公式中的變量,并對其恰當的賦值
		boolean findFirst = false , findSecond = false,findThird = false;
		switch(numOfParameter){
			case 0 :
				for(current = elemList;current != null;current = current.next)
					if(!current.isOperator){
						//強制類型轉換,若轉換不成功則說明是變量
						try{
							Double.parseDouble(current.data);	
						}
						catch (NumberFormatException e){
							throw new Exception ("the variable '" + current.data 
													+ "' needs a value");
						}
					}
					break;
			case 1 :
				for(current = elemList;current != null;current = current.next)
					if(!current.isOperator){
						//強制類型轉換,若轉換不成功則說明是變量
						try{
							Double.parseDouble(current.data);	
						}
						catch (NumberFormatException e){
							findFirst = true;
							firstStr = new String(current.data);
							firstDou = value1;
							break;
						}
					}
				if(!findFirst)
					throw new Exception ("there is no variable,the value '" + value1
											+"' is not needed");
				break;
			case 2 :
				for(current = elemList;current != null;current = current.next)
					if(!current.isOperator){
						//強制類型轉換,若轉換不成功則說明是變量
						try{
							Double.parseDouble(current.data);	
						}
						catch (NumberFormatException e){
							findFirst = true;
							firstStr = new String(current.data);
							firstDou = value1;
							break;
						}
						
					}
				if(!findFirst)
					throw new Exception ("there is no variable,the value '" + value1
											+"' is not needed");
				for(;current != null;current = current.next)
					if(!current.isOperator && !current.data.equals(firstStr)){
						//強制類型轉換,若轉換不成功則說明是變量
						try{
							Double.parseDouble(current.data);	
						}
						catch (NumberFormatException e){
							findSecond = true;
							secondStr = new String(current.data);
							secondDou = value2;
							break;
						}
						
					}
				if(!findSecond)
					throw new Exception ("there are not so much variables,the value '"
											+ value2 + "' is not needed");
				break;
			case 3 :
				for(current = elemList;current != null;current = current.next)
					if(!current.isOperator){
						//強制類型轉換,若轉換不成功則說明是變量
						try{
							Double.parseDouble(current.data);	
						}
						catch (NumberFormatException e){
							findFirst = true;
							firstStr = new String(current.data);
							firstDou = value1;
							break;
						}
						
					}
				if(!findFirst)
					throw new Exception ("there is no variable,the value '" + value1
											+"' is not needed");
				for(;current != null;current = current.next)
					if(!current.isOperator && !current.data.equals(firstStr)){
						//強制類型轉換,若轉換不成功則說明是變量
						try{
							Double.parseDouble(current.data);	
						}
						catch (NumberFormatException e){
							findSecond = true;
							secondStr = new String(current.data);
							secondDou = value2;
							break;
						}
						
					}
				if(!findSecond)
					throw new Exception ("there are not so much variables,the value '"
											+ value2 + "' is not needed");
				for(;current != null;current = current.next)
					if(!current.isOperator && !current.data.equals(firstStr) 
						&& !current.data.equals(secondStr)){
						//強制類型轉換,若轉換不成功則說明是變量
						try{
							Double.parseDouble(current.data);	
						}
						catch (NumberFormatException e){
							findThird = true;
							thirdStr = new String(current.data);
							thirdDou = value3;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人精品gif动图一区| 欧美日韩国产高清一区二区三区| 日本中文一区二区三区| 亚洲一区自拍偷拍| 一级做a爱片久久| 亚洲激情五月婷婷| 夜夜嗨av一区二区三区四季av| 亚洲精品国久久99热| 一级日本不卡的影视| 亚洲国产sm捆绑调教视频| 亚洲制服丝袜一区| 日韩不卡一区二区三区| 免费成人在线观看| 国产一区二区精品久久99| 国产精品一区二区x88av| 国产精品一区二区在线观看不卡| 国产精品综合一区二区| 国产精品系列在线观看| 成人黄色av电影| 欧美在线视频你懂得| 欧美日韩国产一区二区三区地区| 91麻豆精品久久久久蜜臀 | 国产欧美日本一区视频| 中文字幕国产一区| 夜色激情一区二区| 日本不卡的三区四区五区| 青青草精品视频| 国产乱人伦偷精品视频免下载| 国产98色在线|日韩| 91在线视频免费观看| 欧美日高清视频| 久久久www成人免费无遮挡大片| 亚洲国产精品传媒在线观看| 一区二区久久久久久| 美女高潮久久久| av中文字幕一区| 欧美精品一卡二卡| 久久久久久久久久久久久久久99 | 日韩欧美色电影| 国产日韩欧美精品在线| 亚洲综合图片区| 久久精品国产99国产| 不卡的av电影在线观看| 91麻豆精品国产自产在线| 久久久不卡网国产精品二区| 一区二区三区中文字幕| 久久国产精品99久久人人澡| 成人av高清在线| 欧美一区二区日韩一区二区| 国产欧美日韩精品a在线观看| 亚洲国产日日夜夜| 国产传媒久久文化传媒| 欧美日韩日日摸| 国产色婷婷亚洲99精品小说| 亚洲一区av在线| 国产成人综合亚洲网站| 欧美性受xxxx| 欧美国产精品一区| 日韩电影在线观看网站| av午夜精品一区二区三区| 欧美一区二区三区在线看 | 成人短视频下载| 欧美一区二区视频观看视频| 亚洲欧美区自拍先锋| 国产精品77777| 4438x成人网最大色成网站| 成人欧美一区二区三区小说| 老司机精品视频一区二区三区| 日本乱人伦aⅴ精品| 久久久亚洲午夜电影| 日韩不卡手机在线v区| 99久久精品久久久久久清纯| 26uuu久久天堂性欧美| 天涯成人国产亚洲精品一区av| 成人av在线一区二区三区| 欧美大片在线观看| 日韩黄色免费网站| 色婷婷久久久亚洲一区二区三区| 欧美国产视频在线| 精品一区二区三区的国产在线播放 | 精品制服美女丁香| 欧美精品粉嫩高潮一区二区| 一区二区三区四区激情| 不卡视频免费播放| 国产精品欧美一区喷水| 久久国产人妖系列| 欧美精品日韩一本| 亚洲一区二区三区在线播放| 97精品久久久久中文字幕| 欧美韩国日本一区| 国产91对白在线观看九色| 亚洲精品一线二线三线| 亚洲h在线观看| 精品视频在线视频| 亚洲综合视频网| 欧美四级电影在线观看| 亚洲在线视频网站| 91久久久免费一区二区| 亚洲毛片av在线| 色婷婷激情久久| 夜夜嗨av一区二区三区四季av| 日本韩国一区二区三区视频| 亚洲人成亚洲人成在线观看图片 | 一道本成人在线| 亚洲欧美乱综合| 在线免费观看日韩欧美| 一区二区三区资源| 欧美综合一区二区| 亚洲成a人v欧美综合天堂下载| 在线精品视频免费观看| 亚洲一区二区偷拍精品| 欧美浪妇xxxx高跟鞋交| 午夜电影一区二区三区| 4438亚洲最大| 精品一区二区三区视频在线观看 | 午夜精品久久久久久久久久久| 欧美日韩久久一区| 麻豆视频一区二区| 久久综合九色综合97婷婷女人| 成人中文字幕电影| 亚洲欧美国产高清| 欧美人妖巨大在线| 蜜桃视频在线观看一区| 国产日韩综合av| 色综合网色综合| 爽好多水快深点欧美视频| 日韩欧美国产麻豆| 成人免费毛片aaaaa**| 亚洲视频小说图片| 欧美日韩免费一区二区三区视频| 日韩国产欧美三级| 国产日韩欧美亚洲| 欧洲视频一区二区| 奇米影视一区二区三区小说| 国产日韩欧美精品电影三级在线| 91最新地址在线播放| 午夜精品aaa| 精品久久免费看| 99re这里只有精品视频首页| 午夜精品久久久久久久99樱桃| 日韩免费视频线观看| 成人综合在线视频| 亚洲高清中文字幕| 精品成人免费观看| gogo大胆日本视频一区| 婷婷开心激情综合| 国产欧美日韩一区二区三区在线观看 | 99精品国产91久久久久久| 亚洲成av人**亚洲成av**| 精品久久久久久久久久久久包黑料| 国产91综合网| 午夜精品久久久久久久久久| 国产欧美日韩另类一区| 欧美精品一卡两卡| www..com久久爱| 免费成人小视频| 亚洲免费av网站| 精品国产1区二区| 欧美日韩国产成人在线免费| 国产精品一区二区果冻传媒| 亚洲国产精品麻豆| 国产免费成人在线视频| 91精品欧美福利在线观看| 成人污视频在线观看| 爽好久久久欧美精品| 成人免费在线视频| 精品日韩一区二区三区免费视频| 91免费观看视频在线| 国产精品一区三区| 免费在线看成人av| 亚洲婷婷在线视频| 国产午夜精品久久| 欧美一区二区精美| 欧美日韩一区二区不卡| 99这里只有久久精品视频| 久久电影网站中文字幕 | 日本二三区不卡| 国产激情一区二区三区四区 | 99精品欧美一区二区三区小说| 久久不见久久见免费视频1| 亚洲第一福利一区| 亚洲人快播电影网| 国产精品麻豆久久久| 精品久久久久久综合日本欧美 | 国产精品久久久久永久免费观看| 日韩午夜激情av| 欧美日韩亚洲另类| 色妹子一区二区| eeuss鲁一区二区三区| 国产成人鲁色资源国产91色综 | 国产高清在线精品| 国产综合久久久久影院| 日韩成人精品视频| 午夜电影网一区| 亚洲成a天堂v人片| 性做久久久久久免费观看| 一区二区三区不卡视频| 一区二区三区在线观看欧美| 亚洲另类在线一区| 一区二区在线观看免费 |