91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中如何利用棧使用簡易計算器

發布時間:2021-09-27 09:30:49 來源:億速云 閱讀:150 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“Java中如何利用棧使用簡易計算器”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Java中如何利用棧使用簡易計算器”這篇文章吧。

題目:使用棧計算類似表達式:5+2*3-2 的計算結果

提示:簡易計算器操作符號限于+,-,*,/的計算

分析思路:

1、創建一個數棧和一個符號棧,數棧用于存放數字,符號棧用于存放符號

2、創建一個索引index,用于遍歷表達式

3、掃描表達式,如果是數字直接進入數棧,如果是符號,則需要進行判斷。分兩種情況,一是當符號棧如果為空,直接將符號入棧。二是不為空,先比較當前棧頂的符號與將要進棧的符號的優先級大小,如果將要進棧的操作符的優先級小,則將數棧的兩個數彈出,符號棧的操作符彈出一個,并進行計算,計算之后的結果直接進入數棧,如果優先級大,就直接進棧。

4、掃描完表達式之后,就順序的從數棧和符號棧順序的彈出相應的數字和操作符,并進行計算。

5、當符號棧為空時,說明已經計算完了,此時留在數棧的只有一個數字,就是表達式計算之后的結果。

代碼實現

package cn.mrlij.stack; import java.util.Arrays;import java.util.Scanner; /** * 使用數組實現棧 * * @author dreamer * */public class ArrayStackDemo {  public static void main(String[] args) {   String express = "5011+2*3-2";   int index = 0;//定義一個索引值,用于遍歷表達式    int num1 = 0;    int num2 = 0;    int res = 0;//計算結果    char ch = ' ';    int oper = 0;    String keepNum = "";    ArrayStack numStack = new ArrayStack(10);//創建一個數棧    ArrayStack operStack = new ArrayStack(10);//創建一個符號棧    while (true){      ch = express.substring(index,index+1).charAt(0);//不停的遍歷操作符      //判斷是否是操作符      if (operStack.isOper(ch)){        //判斷當前符號棧是否有符號存在        if(!operStack.isEmpty()){          //不為空則判斷優先級          if(operStack.priority(ch)<=operStack.priority(operStack.peek())){            //當優先級小于棧頂的值時候,彈出兩個數棧的值進行計算            num1 = numStack.pop();            num2 = numStack.pop();            oper = operStack.pop();            res = operStack.cal(num1,num2,oper);            //計算以后將計算得到的值放入數棧            numStack.push(res);            //同時將此時的操作符放入符號棧            operStack.push(ch);          }else{            //優先級            operStack.push(ch);          }        }else{          //為空直接將符號入棧          operStack.push(ch);        }      }else {        keepNum += ch;        //處理多位數        if(express.length()-1 == index){          numStack.push(Integer.parseInt(keepNum));        }else {          if(operStack.isOper(express.substring(index+1,index+2).charAt(0))){            numStack.push(Integer.parseInt(keepNum));            keepNum = "";          }        }        // numStack.push(ch-48);      }      index++;      if(index >= express.length()){        break;      }    }    //掃描完之后,將數棧的值,與操作符中的值進行計算    while (true){      if(operStack.isEmpty()){        break;      }      num1 = numStack.pop();      num2 = numStack.pop();      oper = operStack.pop();      res = operStack.cal(num1,num2,oper);      numStack.push(res);    }    System.out.println("表達式:"+express+"="+numStack.pop());  }} class ArrayStack {  private int MaxSize;// 定義數組的最大長度  private int[] arr;// 定義數組,數據就放在該數組  private int top = -1;// 定義棧頂,初始化數據為-1   public ArrayStack(int maxSize) {    this.MaxSize = maxSize;    arr = new int[MaxSize];  }   // 判斷數組是否為空  public boolean isEmpty() {     return top == -1;  }   // 判斷數組是否滿了  public boolean isFull() {    //System.out.println("棧頂:" + top + "最大長度:" + MaxSize);    return top == MaxSize - 1;  }  //取出棧頂元素  public int peek(){    return arr[top];  }  // 進棧  public void push(int val) {    // 先判斷棧是否滿了,滿了就不能添加進去    if (isFull()) {      System.out.println("棧已經滿了~~");      return;    }    top++;    arr[top] = val;  }   // 出棧  public int pop() {    // 先判斷棧是否為空    if (isEmpty()) {      throw new RuntimeException("棧為空,無法出棧!");    }    int val = arr[top];    top--;    return val;  }   public void show() {    if (isEmpty()) {      System.out.println("沒有數據");      return;    }    for (int i = top; i >= 0; i--) {      System.out.print(arr[i] + "\t");    }    System.out.println();  }   /**   * 判斷是否是一個操作符   * @param oper 傳入的字符   * @return 如是操作符返回true,否則返回false   */  public boolean isOper(char oper){    return oper == '+' || oper == '-' || oper =='*' || oper == '/';  }   /**   * 判斷操作符的優先級   * @param oper 傳入的優先級   * @return 返回優先級 分別是1,-1,0   */  public int priority(int oper ){    if(oper == '*' || oper == '/'){      return 1;    } else if(oper == '+' || oper == '-'){      return 0;    }else {      return -1;    }  }   //計算方法  public int cal(int num1,int num2,int oper){    int res = 0;    switch (oper){      case '+': res = num1 + num2;      break;      case '-': res = num2 - num1;      break;      case '*': res = num1 * num2;      break;      case '/': res = num2 /num1;    }    return res;  }}

以上是“Java中如何利用棧使用簡易計算器”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

嘉善县| 略阳县| 达州市| 洪泽县| 道孚县| 峨山| 通城县| 永顺县| 潮安县| 青川县| 南川市| 周口市| 漳州市| 弥勒县| 全州县| 玉环县| 兴义市| 晋州市| 凌云县| 卓尼县| 正镶白旗| 万盛区| 兴城市| 泗水县| 北川| 张家川| 高淳县| 高青县| 潮州市| 宜城市| 宝山区| 安徽省| 彰化县| 临潭县| 高要市| 靖安县| 金湖县| 慈溪市| 定西市| 新郑市| 温泉县|