Discuss / Java / 练习2

练习2

Topic source

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());

}

}


  • 1

Reply