亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Java實現簡單的表達式計算器功能示例

2024-07-14 08:41:23
字體:
來源:轉載
供稿:網友

本文實例講述了Java實現簡單的表達式計算器功能。分享給大家供大家參考,具體如下:

讀入一個只包含 +, -, *, / 的非負整數計算表達式,計算該表達式的值。

Input

測試輸入包含若干測試用例,每個測試用例占一行,每行不超過200個字符,整數和運算符之間用一個空格分隔。沒有非法表達式。當一行中只有0時輸入結束,相應的結果不要輸出。

Output

對每個測試用例輸出1行,即該表達式的值,精確到小數點后2位。

Sample Input

1 + 2
4 + 2 * 5 - 7 / 11
0

Sample Output

3.00
13.36

這是一個簡單的計算器。下面我自己講一下原理吧。簡單的來說就是弄兩個棧一個用來存數值,一個用來存加減乘除的符號。你也可以用數組來做,不過JAVA自己自帶棧的功能,用起來會方便很多。

值得注意的是:用來裝數值的棧,最多存兩個數值,這是為了計算。而裝符號的則是裝一個。當我們遇到' *' 和'/‘時,我們是先進行運算,再壓棧。對了,在寫運算函數時一定要注意,運算的順序,我自己寫的時候,因為大意,也是被坑了很久。

具體代碼如下:

package Temp;import java.util.Scanner;import java.util.Stack;public class P1237 {  public static void main(String[] args) {    Scanner sc = new Scanner(System.in);    String str = sc.nextLine();    while (!str.equals("0")) {// 到0了就結束 用棧來做    Stack<Double> num = new Stack<Double>();// 加數值    Stack<Character> md = new Stack<Character>();// 加運算符“+”,“-”,“*”,“/"    String str1[] = str.split(" ");// 用一個新的數組,以空格來劃分    for (int i = 0; i < str1.length; i++) {      if (isNumber(str1[i])) {// 如果是數字就加棧      double d = Double.parseDouble(str1[i]);      if (num.size() <= 1) {// 最少能放倆個數字進去        num.push(d);      }      } else {      if (md.isEmpty()) {// 如果加字符的為空就加入進去        md.push((str1[i]).charAt(0));      } else {        char md1 = md.peek();// 看棧的頂層是什么符號        char md2 = str1[i].charAt(0);// i i的符號        /*         * 下面自己寫個函數來根據返回值來判斷,先運行什么符號         */        if (opration(md1, md2) <= 1) {        double nextNum = num.pop();// 進行彈棧來運算//代表棧的頂端        double lastNum = num.pop();// 代表棧的底端        // 因為是小于等于一所以先把MD中的符號彈棧,再把后面的符號壓棧,再把結果放入num中        num.push(math(lastNum, nextNum, md.pop()));        md.push(str1[i].charAt(0));        /* 可以不要 */        // } else if (opration(md1, md2) == 2// 判斷下一個符號        // && i + 2 < str1.length        // && opration((str1[i + 2]).charAt(0), md2) != 1) {        // double nextNum = Double.valueOf(str1[i + 1]);        // double lastNum = num.pop();        // num.push(math(nextNum, lastNum, md2));        } else if (opration(md1, md2) == 2) {        double nextNum = Double.valueOf(str1[++i]);// 獲得下一個        double lastNum = num.pop();        num.push(math(lastNum, nextNum, md2));        }      }      }    }    if (!md.empty()) {// 運算符棧中不空的話,數值棧中一定有倆個數值      double nextNum = num.pop();      double lastNum = num.pop();      // System.out.printf("%.2f", math(lastNum, nextNum, md.pop()));      System.out.println(String.format("%.2f",        math(lastNum, nextNum, md.pop())));    } else if (num.size() == 1) {      // System.out.printf("%.2f/n", num.pop());      System.out.println(String.format("%.2f", num.pop()));    }    str = sc.nextLine();// 獲取下一個運算    }  }  private static Double math(double num1, double num2, Character pop) {    // 用swith case來進行匹配運算    switch (pop) {    case '+':    return (num1 + num2);    case '-':    return num1 - num2;    case '*':    return num1 * num2;    case '/':    return num1 / num2;    }    return (double) 0;  }  private static int opration(char md1, char md2) {    if (md1 == '*' || md1 == '/') {    if (md2 == '*' || md2 == '/') {      return 0;// 如果兩個都是乘法或者除法那么運算順序是一樣的    } else      return 1;// 那先運行md1    } else {    if (md2 == '*' || md2 == '/') {      return 2;// 先運行md2    }    }    return 0;// 都是加加減法順序一樣  }  // 判斷是否是數字  private static boolean isNumber(String str) {    char ch[] = str.toCharArray();    for (int i = 0; i < str.length(); i++) {    if (ch[i] < 48 || ch[i] > 57) {      return false;    }    }    return true;  }}

希望本文所述對大家java程序設計有所幫助。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产欧美精品在线| 国产一区视频在线| 欧美激情中文字幕在线| 亚洲一区二区三区成人在线视频精品| 国产精品色婷婷视频| 亚洲成av人影院在线观看| 国产精品第二页| 亚洲国产日韩一区| 一区二区在线视频| 欧美性猛交xxxxx免费看| 国产精品色悠悠| 一本色道久久88综合亚洲精品ⅰ| 欧美精品videossex性护士| 成人亚洲激情网| 色多多国产成人永久免费网站| 国内精品免费午夜毛片| 亚洲人成电影网站色xx| 成人国产精品免费视频| 国产精品高潮呻吟久久av黑人| 久久成年人视频| 日韩高清中文字幕| 成人深夜直播免费观看| 91在线高清视频| 亚洲高清久久久久久| 国产成+人+综合+亚洲欧美丁香花| 国产精品伦子伦免费视频| 日韩高清电影好看的电视剧电影| 亚洲精品视频二区| 91精品免费视频| 亚洲自拍av在线| 国产精品久久91| 日本精品久久电影| 91香蕉嫩草神马影院在线观看| 久热精品在线视频| 国产一区av在线| 国产视频在线一区二区| 亚洲免费视频一区二区| 久操成人在线视频| 在线亚洲国产精品网| 国产91热爆ts人妖在线| 91香蕉国产在线观看| 欧美在线性视频| 麻豆乱码国产一区二区三区| 国产精品成人播放| 亚洲男人天堂古典| 91精品国产色综合| 亚洲女人天堂网| 成人性生交大片免费看视频直播| 精品人伦一区二区三区蜜桃免费| 欧美在线播放视频| 久久久在线视频| 日韩久久精品电影| 91热精品视频| 97视频在线观看播放| 大量国产精品视频| 成人两性免费视频| 懂色av中文一区二区三区天美| 欧美成人激情图片网| 欧洲成人午夜免费大片| 亚洲精品视频播放| 欧美风情在线观看| 韩国精品久久久999| 久久理论片午夜琪琪电影网| 国产精品久久久久免费a∨大胸| 亚洲最新av在线| 91久久精品一区| 欧美午夜片欧美片在线观看| 欧美成人网在线| 91日本在线视频| 精品一区二区三区三区| 精品国产91久久久久久老师| 福利精品视频在线| 中文字幕自拍vr一区二区三区| 久久在线免费观看视频| 日韩电影在线观看永久视频免费网站| 国产一区二区三区直播精品电影| 国产女人精品视频| 亚洲第一色在线| 色偷偷噜噜噜亚洲男人| 亚洲影视九九影院在线观看| 日韩精品极品视频免费观看| 国产成+人+综合+亚洲欧美丁香花| 午夜精品一区二区三区av| 亚洲欧美www| 亚洲片在线资源| 午夜精品福利在线观看| 欧美日韩亚洲视频一区| 色天天综合狠狠色| 欧美一区三区三区高中清蜜桃| 亚洲美女精品成人在线视频| 欧美劲爆第一页| 国产精品一区二区三| 国产精品黄色影片导航在线观看| 亚洲第一中文字幕在线观看| 国产亚洲精品91在线| 日韩女优在线播放| 日韩av在线电影网| 亚洲美女福利视频网站| 亚洲精品色婷婷福利天堂| 国产亚洲精品激情久久| 精品亚洲一区二区三区在线观看| 午夜精品久久久久久久男人的天堂| 欧美另类高清videos| 国产一区二区三区在线| 亚洲小视频在线| 精品久久久久久久久国产字幕| 日韩中文字幕在线观看| 欧美激情精品久久久久久大尺度| 国产精品视频久久久久| 亚洲色图15p| 91免费版网站入口| 91香蕉国产在线观看| 欧美电影免费观看高清| 国产一区二区色| 国产精品一区二区三区免费视频| 欧美第一黄色网| 热久久免费视频精品| 国产女精品视频网站免费| 2019中文字幕免费视频| 成人有码在线播放| 亚洲电影免费观看高清完整版在线| 亚洲免费小视频| 国产精品海角社区在线观看| 91在线视频成人| 永久免费精品影视网站| 日本久久91av| 国产成人精品亚洲精品| 国产精品99久久久久久久久久久久| 亚洲第一区第一页| 国产视频精品一区二区三区| 国产区精品视频| 国内精品400部情侣激情| 91视频-88av| 最好看的2019年中文视频| 国产成人综合精品| 亚洲影影院av| 九九精品视频在线| 国产美女精彩久久| 国产区亚洲区欧美区| 亚洲国产日韩欧美在线动漫| 国产免费成人av| 日韩免费在线看| 日本一区二区在线播放| 亚洲韩国日本中文字幕| 91色精品视频在线| 黄色成人在线免费| 麻豆成人在线看| 国产精品第10页| 日韩精品小视频| 亚洲免费人成在线视频观看| 91wwwcom在线观看| 91丨九色丨国产在线| 亚洲最大福利视频网| 欧美在线精品免播放器视频| 精品视频中文字幕| 福利视频一区二区| 成人黄色av网| 国产欧美一区二区三区在线| 岛国精品视频在线播放| 欧美男插女视频| 国产在线精品成人一区二区三区| 色偷偷av亚洲男人的天堂| 成人免费福利在线| 91最新在线免费观看|