(자바) 산술 표현 식 의 계산 접미사 표현 식
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Stack;
/*
: , , , 。
:operandStack( )、operatorStack( )。
, 。 , operatorStack ,
operandStack , operandStack .
:
1. : , 、 。
1.1. , operandStack 。
1.2. + - , +、-
, + - , operatorStack
, operatorStack 。
1.3. * / , operatorStack * /
, operatorStack 。
1.4. "(", operatorStack 。
1.5. ")", operatorStack , ")"。
2. : operatorStack , operatorStack 。
*/
class Demo {
public static int evaluateExpression(String expression) {
Stack operandStack = new Stack();//
Stack operatorStack = new Stack();//
//
ArrayList result = new ArrayList();
String num = "";
for (int i = 0; i < expression.length(); i++) {
if (Character.isDigit(expression.charAt(i))) {
num = num + expression.charAt(i);
} else {
result.add(num);
result.add(expression.charAt(i) + "");
num = "";
}
}
result.add(num);
//
// for(String str:result){
// System.out.print(str+" ");
// }
//
for (int i = 0; i < result.size(); i++) {
if (result.get(i).equals("+") || result.get(i).equals("-")) {
// "+" "-",
while (!operatorStack.isEmpty() && (operatorStack.peek() == '+' || operatorStack.peek() == '-'
|| operatorStack.peek() == '*' || operatorStack.peek() == '/')) {
processOneOperator(operandStack, operatorStack);
}
operatorStack.push(result.get(i).charAt(0));//
} else if (result.get(i).equals("*") || result.get(i).equals("/")) {
// "*" "/",
while (!operatorStack.isEmpty() && (operatorStack.peek() == '*' || operatorStack.peek() == '/')) {
processOneOperator(operandStack, operatorStack);
}
operatorStack.push(result.get(i).charAt(0));
} else if (result.get(i).equals("(")) {
// ,
operatorStack.push('(');
} else if (result.get(i).equals(")")) {
// , ,
while (operatorStack.peek() != '(') {
processOneOperator(operandStack, operatorStack);
}
operatorStack.pop();//
} else {
// ,
operandStack.push(Integer.parseInt(result.get(i)));
}
}
// ,
while (!operatorStack.isEmpty()) {
processOneOperator(operandStack, operatorStack);
}
//
return operandStack.pop();
}
/**
*
*
* @param operandStack
* @param operatorStack
*/
public static void processOneOperator(Stack operandStack, Stack operatorStack) {
char op = operatorStack.pop();
//
int op1 = operandStack.pop();
//
int op2 = operandStack.pop();
//
if (op == '+') {
// +, ,
operandStack.push(op2 + op1);
} else if (op == '-') {
operandStack.push(op2 - op1);
} else if (op == '*') {
operandStack.push(op2 * op1);
} else if (op == '/') {
operandStack.push(op2 / op1);
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
System.out.println(" ( ):");
while (cin.hasNext()) {
String s = cin.next();
// System.out.println(" :");
System.out.println(s + "=" + evaluateExpression(s));
}
cin.close();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.