欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)中序表達(dá)式的實(shí)例代碼

 更新時(shí)間:2018年08月08日 10:45:28   作者:白衣風(fēng)塵嘆  
這篇文章主要介紹了Java實(shí)現(xiàn)中序表達(dá)式的實(shí)例代碼,需要的朋友可以參考下

什么是中序表達(dá)式

前序(前綴)表達(dá)式要求每一個(gè)操作符出現(xiàn)在其操作數(shù)之前.一般不用. 寫表達(dá)式的后序表達(dá)式一般是為了便利于計(jì)算機(jī)編程中棧的實(shí)現(xiàn),所以用的較多.

具體代碼如下所示:

package 表達(dá)式求值;
import java.util.Stack;
/*
 * 中序表達(dá)式求值實(shí)現(xiàn)
 */
public class CenterExpression {
 public double evaluate(String expression){ //傳入中序表達(dá)式
  char [] ex = expression.toCharArray();
  Stack<Double> num = new Stack<>();
  Stack<Character> ops = new Stack<>();
  for(int i = 0; i < ex.length; i++){  //循環(huán)將表達(dá)式依次入棧
   char c = ex[i];
   if(c < '9' && c > '0'){
    num.push(Double.parseDouble(Character.toString(c)));
   }
   else if(c == '('){
    ops.push('(');
   }
   else if(c == ')'){
    while(true){
     char op = ops.pop();
     if(op == '('){
      break;
     }
     else{
      switch(op){
      case '+':num.push(num.pop()+num.pop());break;
      case '-':num.push(num.pop()-num.pop());break;
      case '*':num.push(num.pop()*num.pop());break;
      case '/':num.push(num.pop()/num.pop());break;
      default:break;
      }
     }
    }
   }
   else if(ops.empty() && (c == '+' || c == '-' || c == '*' || c == '/')){
    ops.push(c);
   }
   else if(!ops.isEmpty() && (c == '+' || c == '-' || c == '*' || c == '/')){
    char op =ops.peek();
    while((op == '*' || op == '/') && (c == '+' || c == '-')){
     op = ops.pop();
     switch(op){
     case '+':num.push(num.pop()+num.pop());break;
     case '-':num.push(num.pop()-num.pop());break;
     case '*':num.push(num.pop()*num.pop());break;
     case '/':num.push(num.pop()/num.pop());break;
     default:break;
     }
     if(ops.isEmpty()){
      break;
     }
     else{
      op = ops.peek();
     }
    }
    ops.push(c);
   }
  }
  while(!ops.isEmpty()){  //處理剩余可以按計(jì)算機(jī)掃描順序處理的表達(dá)式
   char op =ops.pop();
   switch(op){
   case '+':num.push(num.pop()+num.pop());break;
   case '-':num.push(num.pop()-num.pop());break;
   case '*':num.push(num.pop()*num.pop());break;
   case '/':num.push(num.pop()/num.pop());break;
   default:break;
   }
  }
  return num.pop();
 }
 public static void main(String [] args){
  CenterExpression exp = new CenterExpression();
  System.out.println(exp.evaluate("1*2+5*3"));
 }
}

總結(jié)

以上所述是小編給大家介紹的Java實(shí)現(xiàn)中序表達(dá)式的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java interceptor攔截器的方法

    Java interceptor攔截器的方法

    java里的攔截器是動(dòng)態(tài)攔截Action調(diào)用的對(duì)象,它提供了一種機(jī)制可使開發(fā)者在一個(gè)Action執(zhí)行的先后執(zhí)行一段代碼,也能夠在一個(gè)Action,接下來通過本文給大家介紹Java interceptor攔截器的方法,感興趣的朋友一起看看吧
    2022-01-01
  • SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用

    本文主要介紹了SpringBoot?整合MyBatis+MyBatis-Plus+MyBatisX插件使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • jdk-logging?log4j?logback日志系統(tǒng)實(shí)現(xiàn)機(jī)制原理介紹

    jdk-logging?log4j?logback日志系統(tǒng)實(shí)現(xiàn)機(jī)制原理介紹

    這篇文章主要介紹了jdk-logging、log4j、logback日志介紹以及三個(gè)日志系統(tǒng)的實(shí)現(xiàn)機(jī)制,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • Java源碼解析HashMap的tableSizeFor函數(shù)

    Java源碼解析HashMap的tableSizeFor函數(shù)

    今天小編就為大家分享一篇關(guān)于Java源碼解析HashMap的tableSizeFor函數(shù),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • redis深入淺出分布式鎖實(shí)現(xiàn)上篇

    redis深入淺出分布式鎖實(shí)現(xiàn)上篇

    在單體應(yīng)用中,如果我們對(duì)共享數(shù)據(jù)不進(jìn)行加鎖操作,會(huì)出現(xiàn)數(shù)據(jù)一致性問題,我們的解決辦法通常是加鎖。下面我們一起聊聊使用redis來實(shí)現(xiàn)分布式鎖
    2022-08-08
  • Spring Boot 常用注解大全

    Spring Boot 常用注解大全

    這篇文章主要介紹了Spring Boot 常用注解大全,需要的朋友可以參考下
    2024-02-02
  • Java程序員常犯的五個(gè)錯(cuò)誤

    Java程序員常犯的五個(gè)錯(cuò)誤

    這篇文章總結(jié)以前經(jīng)驗(yàn)針對(duì)java編程的一些習(xí)慣,給出一些關(guān)于java編程的建議: 當(dāng)你開始成為一個(gè)程序員的時(shí)候,在編程的時(shí)候很容易陷入下面所述的一些壞習(xí)慣,下面把Java程序員常犯的五個(gè)錯(cuò)誤整理如下,需要的朋友可以參考下
    2015-07-07
  • JAVA獲取Image的三種方式

    JAVA獲取Image的三種方式

    這篇文章主要介紹了JAVA獲取Image的三種方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Springboot @Configuration與自動(dòng)配置詳解

    Springboot @Configuration與自動(dòng)配置詳解

    這篇文章主要介紹了SpringBoot中的@Configuration自動(dòng)配置,在進(jìn)行項(xiàng)目編寫前,我們還需要知道一個(gè)東西,就是SpringBoot對(duì)我們的SpringMVC還做了哪些配置,包括如何擴(kuò)展,如何定制,只有把這些都搞清楚了,我們?cè)谥笫褂貌艜?huì)更加得心應(yīng)手
    2022-07-07
  • 用java實(shí)現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實(shí)現(xiàn)代碼

    用java實(shí)現(xiàn)的獲取優(yōu)酷等視頻縮略圖的實(shí)現(xiàn)代碼

    想獲取優(yōu)酷等視頻縮略圖,在網(wǎng)上沒有找到滿意的資料,參考了huangdijia的PHP版工具一些思路,寫了下面的JAVA版代碼。。其實(shí)也可以做成JS版的
    2013-05-05

最新評(píng)論