- 遇到操作數(shù):直接輸出(添加到后綴表達式中);
- 棧為空時,遇到運算符,直接入棧;
- 遇到左括號:將其入棧;
- 遇到右括號:執(zhí)行出棧操作,并將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出;
- 遇到其他運算符:加減乘除:彈出所有優(yōu)先級大于或者等于該運算符的棧頂元素,然后將該運算符入棧;
- 最終將棧中的元素依次出棧,輸出;
計算9+(3-1)*2+8/2值
public static void main(String[] args) {
String s ="9+(3-1)*2+8/2";
ArrayList<Character> list = createStack(s);
Stack<Integer> stack = new Stack<Integer>();
//計算
list.forEach(character -> {
if (Character.isDigit(character)) {stack.push(getNumber(character));return ;}
Integer num1 = stack.pop();
Integer num2 = stack.pop();
switch (character){
case '*': stack.push(num2*num1);break;
case '+':;stack.push(num2+num1);break;
case '-':;stack.push(num2-num1);break;
case '/':;stack.push(num2/num1);break;
}
});
//結(jié)果
System.out.println();
System.out.println(stack.pop());
}
static int getNumber(Character c){
return Character.getNumericValue(c);
}
static ArrayList<Character> createStack(String s){
Stack<Character> stack = new Stack();
char[] chars = s.toCharArray();
ArrayList list = new ArrayList();
for(char c:chars){
// 遇到操作數(shù):直接輸出(添加到后綴表達式中);
if(Character.isLetterOrDigit(c)){
list.add(c);
}
//遇到左括號:將其入棧;
else if(c=='('){
stack.push(c);
}
//遇到右括號:執(zhí)行出棧操作,并將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出;
else if(c==')'){
while (!(stack.peek()=='(')){
list.add(stack.pop());
}
stack.pop();
}
//遇到其他運算符:加減乘除:彈出所有優(yōu)先級大于或者等于該運算符的棧頂元素,然后將該運算符入棧;
else{
while (!stack.isEmpty()&&(getPriority(c)<=getPriority((char)stack.peek()))){
list.add(stack.pop());
}
stack.push(c);
}
}
//最終將棧中的元素依次出棧,輸出;
while (!stack.isEmpty()){
list.add(stack.pop());
}
list.forEach(charc->{
System.out.print(charc);
});
return list;
}
static int getPriority(char c){
if(c=='*' || c=='/'){
return 2;
}
else if(c=='+'||c=='-'){
return 1;
}
else {
return 0;
}
}
}```
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。