后缀算数表达式 21 8 * 3 4 10 7 - * /结果是多少?怎么算这个啊???急求 后缀算数表达式 21 8 * 3 4 10 7 - * /结果是多少?怎么算这个啊???急求 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [[size=24px]size=11px]大家好原题目是这个 21 8 * 3 * 4 10 7 - * /[/size][/size] import java.util.ArrayDeque;import java.util.Deque;enum TokenType {NUM, OP}class Token { public Token(TokenType type, float value, char op) { this.type = type; this.value = value; this.op = op; } public TokenType type; public float value; public char op;}public class Main { public static void main(String[] args) { String s = "21 8 + 3 * 4 10 7 - * /"; String[] tokens = s.split("\\s"); Deque<Token> stack = new ArrayDeque<Token>(); Token token = null; Token num1, num2; for(String t:tokens) { token = createToken(t); switch(token.type) { case NUM: stack.push(token); break; case OP: num2 = stack.pop(); num1 = stack.pop(); stack.push(calculate(num1, num2, token)); break; } } System.out.println(stack.pop().value); } private static Token createToken(String s) { Token result = null; if(s.charAt(0)>='0' && s.charAt(0)<='9') { result = new Token(TokenType.NUM, Float.parseFloat(s), ' '); }else { result = new Token(TokenType.OP, 0.0f, s.charAt(0)); } return result; } private static Token calculate(Token num1, Token num2, Token op) { float value = 0.0f; switch(op.op) { case '+': value = num1.value + num2.value; break; case '-': value = num1.value - num2.value; break; case '*': value = num1.value * num2.value; break; case '/': value = num1.value / num2.value; break; } return new Token(TokenType.NUM, value, ' '); }} 21 8 * 3 * 4 10 7 - * /--->168 3 * 4 10 7 - * /--->504 4 10 7 - * /--->504 4 3 * /--->504 12 /--->42结果子42 21 8 + 3 * 4 10 7 - * / --->29 3 * 4 10 7 - * /--->87 4 10 7 - * /--->87 4 3 * /--->87 12 /--->29/4 为啥会出现空指针了,纠结了半天。请各位大侠帮忙分析一下 关于字节流从socket里面读数据的问题? 求救,解决追加500分,下拉列表框实现无限分类 关于junit 求救高手----急---^^ 一个垃圾回收的问题 请教各位高手关于多线程的问题???? 一个正方形的调用 idl2java问题 一个User类,里面有int和String字段/域,但还有User字段/域,我不理解 关于数据传输的需求 写一段代码,一个方法,入口参数是一个整形数组,在方法内对数组元素排序,返回最大值。这个怎么写??
21 8 * 3 * 4 10 7 - * /[/size][/size]
import java.util.Deque;enum TokenType {NUM, OP}class Token {
public Token(TokenType type, float value, char op) {
this.type = type;
this.value = value;
this.op = op;
}
public TokenType type;
public float value;
public char op;
}public class Main { public static void main(String[] args) {
String s = "21 8 + 3 * 4 10 7 - * /";
String[] tokens = s.split("\\s");
Deque<Token> stack = new ArrayDeque<Token>();
Token token = null;
Token num1, num2;
for(String t:tokens) {
token = createToken(t);
switch(token.type) {
case NUM:
stack.push(token);
break;
case OP:
num2 = stack.pop();
num1 = stack.pop();
stack.push(calculate(num1, num2, token));
break;
}
}
System.out.println(stack.pop().value);
} private static Token createToken(String s) {
Token result = null;
if(s.charAt(0)>='0' && s.charAt(0)<='9') {
result = new Token(TokenType.NUM, Float.parseFloat(s), ' ');
}else {
result = new Token(TokenType.OP, 0.0f, s.charAt(0));
}
return result;
}
private static Token calculate(Token num1, Token num2, Token op) {
float value = 0.0f;
switch(op.op) {
case '+':
value = num1.value + num2.value;
break;
case '-':
value = num1.value - num2.value;
break;
case '*':
value = num1.value * num2.value;
break;
case '/':
value = num1.value / num2.value;
break;
}
return new Token(TokenType.NUM, value, ' ');
}
}
--->168 3 * 4 10 7 - * /
--->504 4 10 7 - * /
--->504 4 3 * /
--->504 12 /
--->42结果子42
--->29 3 * 4 10 7 - * /
--->87 4 10 7 - * /
--->87 4 3 * /
--->87 12 /
--->29/4