1、compile 方法
static SuffixExpression compile(String exp) {
// TODO:
Queue<String> qu=new LinkedList<>();
Deque<String> qu1=new LinkedList<>();
char[] ch=exp.toCharArray();
for(char c:ch) {
if((c>=48 && c<=57) || (c>=97 && c<=122)) {
qu.add(String.valueOf(c));
}else if(c==40 || c==41 || c==32){
continue;
}else {
qu1.push(String.valueOf(c));
}
for(String s:qu1) {
qu.add(s);
return new SuffixExpression(qu);
2、SuffixExpression类
class SuffixExpression {
Queue<String> qu;
public SuffixExpression(Queue<String> qu) {
// TODO Auto-generated constructor stub
this.qu=qu;
int execute(Map<String, Integer> env) {
Deque<String> de=new LinkedList<>();
for(String s:qu) {
char s1=s.charAt(0);
if(s1>=48 && s1<=57) {
de.push(s);
System.out.println(s);
}else if(s1>=97 && s1<=122) {
de.push(env.get(s).toString());
switch(s) {
case "-":
int d1=Integer.valueOf(de.pop());
int d2=Integer.valueOf(de.pop());
de.push(String.valueOf(d2-d1));
break;
case "*":
int d3=Integer.valueOf(de.pop());
int d4=Integer.valueOf(de.pop());
de.push(String.valueOf(d4*d3));
case "+":
int d5=Integer.valueOf(de.pop());
int d6=Integer.valueOf(de.pop());
de.push(String.valueOf(d5+d6));
return Integer.valueOf(de.pop());
Sign in to make a reply
放手放手快放手
1、compile 方法
static SuffixExpression compile(String exp) {
// TODO:
Queue<String> qu=new LinkedList<>();
Deque<String> qu1=new LinkedList<>();
char[] ch=exp.toCharArray();
for(char c:ch) {
if((c>=48 && c<=57) || (c>=97 && c<=122)) {
qu.add(String.valueOf(c));
}else if(c==40 || c==41 || c==32){
continue;
}else {
qu1.push(String.valueOf(c));
}
}
for(String s:qu1) {
qu.add(s);
}
return new SuffixExpression(qu);
}
2、SuffixExpression类
class SuffixExpression {
Queue<String> qu;
public SuffixExpression(Queue<String> qu) {
// TODO Auto-generated constructor stub
this.qu=qu;
}
int execute(Map<String, Integer> env) {
// TODO:
Deque<String> de=new LinkedList<>();
for(String s:qu) {
char s1=s.charAt(0);
if(s1>=48 && s1<=57) {
de.push(s);
System.out.println(s);
}else if(s1>=97 && s1<=122) {
de.push(env.get(s).toString());
}else {
switch(s) {
case "-":
int d1=Integer.valueOf(de.pop());
int d2=Integer.valueOf(de.pop());
de.push(String.valueOf(d2-d1));
break;
case "*":
int d3=Integer.valueOf(de.pop());
int d4=Integer.valueOf(de.pop());
de.push(String.valueOf(d4*d3));
break;
case "+":
int d5=Integer.valueOf(de.pop());
int d6=Integer.valueOf(de.pop());
de.push(String.valueOf(d5+d6));
break;
}
}
}
return Integer.valueOf(de.pop());
}
}