91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 3KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2021-06-01
  • 語言: Java
  • 標簽: 數據結構??java??

資源簡介

JAVA數據結構復雜表達式求值

資源截圖

代碼片段和文件信息

/*中南大學軟件學院陳祖煌2013-12-01*/
/*程序實現原理:
?*?1.將用戶輸入的表達式利用棧來轉換為后綴式,例:2+4*(2-2)變為后綴式則是2;4;2;2;-;*;+
?*?2.然后直接計算后綴式計算方法是2;4;2;2;-;*;+?--→?2;4;0;*;+?--→?2;0;+?---→?2
?*?3.如果有單詞運算,例如abs(-10.01)等,則先將abs(-10.01)算出來,然后將結果代回原表達式中,執行1、2步即可。
?*/

import?javax.swing.*;
import?java.util.*;
import?java.util.regex.*;


public?class?Caculator?{
NumberList?number;
CharList?mychar;

public?Caculator(){
number?=?new?NumberList(); //新建一個數字棧
mychar?=?new?CharList(); //新建一個符號棧
}
//主函數,程序入口
public?static?void?main(String[]?args){
Scanner?sc?=?new?Scanner(System.in); //從鍵盤讀入表達式
System.out.println(“請務必正確輸入表達式例如:?1.8+abs(-0.2)+exp(0)+sin(90)+ln(1)+log10(1000)*(-1+4)“);
System.out.print(“請輸入表達式:“);
String?express?=?sc.nextLine();?????????????????????????????????//用戶輸入的表達式

Caculator?ca?=?new?Caculator(); //new一個Caculator類
String?behind?=?ca.toBehind(express+“#“);???????????????????????//用Caculator對象的toBehind函數將表達式轉換為后綴式
System.out.println(“結果為:“?+?ca.caculate(behind)); //用caculate方法將后綴式計算出來,并輸出結果
}


//將參數express表達式轉換為后綴式,返回這個后綴式
public?String?toBehind(String?express){???????????????????????????????????//把表達式變成后綴式
express?=?deal(express); //進行符號運算處理

//對express的負號識別處理操作
if(express.charAt(0)?==?‘-‘){ //如果第符號在串首的地方,則在前面加0
express?=?“0“?+?express;
}
for(int?i?=?express.length()-1;?i?>=?1;?i--){ //如果負號前面是括號,則在前面加0
if(express.charAt(i)?==?‘-‘?&&?express.charAt(i-1)?==?‘(‘){
express?=?express.substring(0?i)?+?“0“?+?express.substring(i);
}
}

String?behind?=?new?String();
mychar.push(‘#‘);?????????????????????????????????????????????????????//把‘#‘放到棧底

for(int?i?=?0;?i?
if(?(express.charAt(i)<=57?&&?express.charAt(i)>=48)?||?express.charAt(i)?==?‘.‘){???//如果此字符是數字或小數點則輸出到后追式
behind?+=?express.charAt(i);
}

else?if(express.charAt(i)?==?‘#‘){???????????????????//如果是表達式結束符
while(mychar.top?!=?1){??????????????????????????//從棧頂依次彈出所有運算符,并加到后綴式
behind?+=?(“;“?+?mychar.pop());
}???????????????????????????????????????????????//循環完成后,已經得到想要的后綴式了
}

else{????????????????????????????????????????????//如果是操作符,則用分號隔開,以便把幾個表示同一個數字的字符變為double型
behind?+=?“;“;

if(?Osp(express.charAt(i))?>?Isp(mychar.top())?){?????????//如果express.charAt(i)比棧頂字符優先級高則入棧
mychar.push(express.charAt(i));
}

else?if(?Osp(express.charAt(i))?==?Isp(mychar.top())?){????????//如果和棧頂操作符優先級相等,則是右括號與左括號匹配的情況,應把左括號扔掉
mychar.pop();
}

else{???????????????????????????????????????????????????????//如果比棧頂字符優先級低則彈出棧頂元素加入后綴式中,直至棧頂元素優先級比其低時就入棧
boolean?higher?=?false;

while?(!higher){
behind?+=?(mychar.pop()?+?“;“);

if(?Osp(express.charAt(i))?>?Isp(mychar.top())){
higher?=?true;
mychar.push(express.charAt(i));
}
else?if(?Osp(express.charAt(i))?==?Isp(mychar.top())?){????????//

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????13991??2014-01-03?13:51??Caculator.java

評論

共有 條評論