最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實現(xiàn)計算器的代碼

 更新時間:2018年06月17日 13:09:35   作者:Owen-Chan  
這篇文章主要為大家介紹了Java實現(xiàn)計算器的詳細代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

用Java實現(xiàn)的計算器,原理看代碼注釋,具體內(nèi)容如下

public class MyCalculator {

 public static void main(String[] args) {
 String obj = "6+(8/2)+6/3+1*8 + 30";
 ArrayList<String> arrayList = strFormat(obj);
 System.out.println(obj + "=" + calculator(arrayList));
 }


 /**
 * 采用后續(xù)表達式計算結(jié)果
 * 1、當前字符串為數(shù)字時,直接入棧
 * 2、當前字符串為計算符時,取出棧中的前兩個計算
 * 3、將計算結(jié)果再放入到棧中,棧中最后剩余的一個元素就是要求的結(jié)果
 */
 private static int calculator(ArrayList<String> obj) {
 ArrayList<String> result = transform(obj);
 System.out.println(result);
 Stack<Integer> stack = new Stack<>();

 for (int i = 0; i < result.size(); i++) {
  String symbol = result.get(i);
  if (isDigital(symbol)) { //數(shù)字直接入棧
  stack.push(Integer.parseInt(symbol));
  } else { // 處理操作符
  int num1, num2;
  num1 = stack.pop(); //取出兩個數(shù)
  num2 = stack.pop();
  switch (symbol) {
   case "+":
   stack.push(num2 + num1);
   break;
   case "-":
   stack.push(num2 - num1);
   break;
   case "*":
   stack.push(num2 * num1);
   break;
   case "/":
   stack.push(num2 / num1);
   break;
   default:
   break;
  }
  }
 }
 return stack.pop();
 }

 /**
 * 中序遍歷改為后續(xù)遍歷
 */
 private static ArrayList<String> transform(ArrayList<String> arrayList) {
 Stack<String> stack = new Stack<>();
 ArrayList<String> result = new ArrayList<>();
 for (int index = 0; index < arrayList.size(); index++) {
  String symbol = arrayList.get(index);
  if (isDigital(symbol)) { //如果是數(shù)字直接輸出
  result.add(symbol);
  } else if (symbol.equals(")")) {
  String tmp;
  while (!(tmp = stack.pop()).equals("(")) { // 匹配成功后停止
   result.add(tmp);
  }
  } else {
  if (stack.isEmpty()) {
   stack.push(symbol);
   continue;
  }
  String tmp = stack.peek();
  while (outPriority(symbol) <= inPriority(tmp)) { //優(yōu)先級小于棧內(nèi)優(yōu)先級,一直出棧
   result.add(tmp);
   stack.pop();
   if (stack.isEmpty()) {
   break;
   }
   tmp = stack.peek();
  }
  stack.push(symbol);
  }
 }
 //將剩余的出棧
 while (!stack.isEmpty()) {
  result.add(stack.pop());
 }
 return result;
 }

 /**
 * 首先對String 進行格式化 轉(zhuǎn)化成ArrayList
 * @param src 3*5+8;
 * @return ArrayList 3 * 5 + 8
 */
 private static ArrayList<String> strFormat(String src) {
 if (src == null || src.equals("")) {
  return null;
 }
 ArrayList<String> arrayList = new ArrayList<>();
 StringBuilder comChar = new StringBuilder();
 for (int i = 0; i <src.length(); i++) {
  char ch = src.charAt(i);
  if (ch == ' ') {
  continue; //去除空格
  }
  if (!Character.isDigit(ch)) {
  if (!comChar.toString().trim().equals("")) {
   arrayList.add(comChar.toString().trim());
   comChar.delete(0, comChar.length());
  }
  arrayList.add(ch + "");
  continue;
  }
  comChar.append(ch);
 }
 if (!comChar.toString().trim().equals("")) {
  arrayList.add(comChar.toString().trim());
 }
 return arrayList;
 }

 /**
 * 判斷是否為數(shù)字
 * @param symbol 782 或者 + - * /
 * @return true or false
 */
 private static boolean isDigital(String symbol) {
 return !symbol.equals("+") && !symbol.equals("-")
  && !symbol.equals("*") && !symbol.equals("/")
  && !symbol.equals("(") && !symbol.equals(")");
 }

 private static int inPriority(String ch) {
 switch (ch) {
  case "+":
  case "-":
  return 2;
  case "*":
  case "/":
  return 4;
  case ")":
  return 7;
  case "(":
  return 1;
  default:
  return 0;
 }
 }

 private static int outPriority(String ch) {
 switch (ch) {
  case "+":
  case "-":
  return 3;
  case "*":
  case "/":
  return 5;
  case ")":
  return 1;
  case "(":
  return 7;
  default:
  return 0;
 }
 }
}

以上全部為本篇文章的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決Springboot不能自動提交數(shù)據(jù)庫連接問題

    解決Springboot不能自動提交數(shù)據(jù)庫連接問題

    在使用SSM框架開發(fā)時,若在同一Service內(nèi)部方法間互相調(diào)用,直接使用this關(guān)鍵字會導致事務(wù)管理失效,從而引發(fā)如數(shù)據(jù)庫連接不足等問題,原因是通過this調(diào)用不會經(jīng)過Spring的代理,因此不會自動進行事務(wù)處理
    2024-09-09
  • Spring?Boot?集成Redisson實現(xiàn)分布式鎖詳細案例

    Spring?Boot?集成Redisson實現(xiàn)分布式鎖詳細案例

    這篇文章主要介紹了Spring?Boot?集成Redisson實現(xiàn)分布式鎖詳細案例,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • JAVA如何把數(shù)據(jù)庫的數(shù)據(jù)處理成樹形結(jié)構(gòu)

    JAVA如何把數(shù)據(jù)庫的數(shù)據(jù)處理成樹形結(jié)構(gòu)

    本文介紹了JAVA如何把數(shù)據(jù)庫的數(shù)據(jù)處理成樹形結(jié)構(gòu),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • java底層JDK?Logging日志模塊處理細節(jié)深入分析

    java底層JDK?Logging日志模塊處理細節(jié)深入分析

    這篇文章主要為大家介紹了java底層JDK?Logging日志模塊處理細節(jié)深入分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-03-03
  • maven插件maven-jar-plugin構(gòu)建jar文件的詳細使用

    maven插件maven-jar-plugin構(gòu)建jar文件的詳細使用

    maven-jar-plugin插件時maven中最常用的插件,也是maven構(gòu)建Java程序執(zhí)行包或者依賴包的默認插件,本文主要介紹了maven插件maven-jar-plugin構(gòu)建jar文件的詳細使用,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • SpringBoot3實現(xiàn)Gzip壓縮優(yōu)化的技術(shù)指南

    SpringBoot3實現(xiàn)Gzip壓縮優(yōu)化的技術(shù)指南

    隨著 Web 應(yīng)用的用戶量和數(shù)據(jù)量增加,網(wǎng)絡(luò)帶寬和頁面加載速度逐漸成為瓶頸,為了減少數(shù)據(jù)傳輸量,提高用戶體驗,我們可以使用 Gzip 壓縮 HTTP 響應(yīng),本文將介紹如何在 Spring Boot 3 中實現(xiàn) Gzip 壓縮優(yōu)化,需要的朋友可以參考下
    2025-04-04
  • 使用Mock進行業(yè)務(wù)邏輯層Service測試詳解

    使用Mock進行業(yè)務(wù)邏輯層Service測試詳解

    這篇文章主要介紹了使用Mock進行業(yè)務(wù)邏輯層Service測試詳解,mock是一種模擬對象的技術(shù),用于在測試過程中替代真實的對象,通過mock,我們可以控制被模擬對象的行為和返回值,以便進行更加精確的測試,需要的朋友可以參考下
    2023-08-08
  • Java Spring Security認證與授權(quán)及注銷和權(quán)限控制篇綜合解析

    Java Spring Security認證與授權(quán)及注銷和權(quán)限控制篇綜合解析

    Spring Security 是 Spring 家族中的一個安全管理框架,實際上,在 Spring Boot 出現(xiàn)之前,Spring Security 就已經(jīng)發(fā)展了多年了,但是使用的并不多,安全管理這個領(lǐng)域,一直是 Shiro 的天下
    2021-10-10
  • Java8如何從一個Stream中過濾null值

    Java8如何從一個Stream中過濾null值

    這篇文章主要介紹了Java8如何從一個Stream中過濾null值,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • java實現(xiàn)微信掃碼支付功能

    java實現(xiàn)微信掃碼支付功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)微信掃碼支付功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07

最新評論

石嘴山市| 嘉兴市| 攀枝花市| 霞浦县| 鄂州市| 灵宝市| 重庆市| 古田县| 新巴尔虎右旗| 抚宁县| 崇信县| 高尔夫| 临潭县| 临沧市| 康保县| 班玛县| 泽普县| 昭平县| 双鸭山市| 深水埗区| 京山县| 肥乡县| 江永县| 阿克苏市| 监利县| 江阴市| 彭州市| 清苑县| 新化县| 蒲城县| 赤城县| 江阴市| 永春县| 隆子县| 镇宁| 灌南县| 蕲春县| 喜德县| 紫阳县| 晋州市| 三河市|