写了一个中缀表达式转后缀表达式的接口,但是运行起来依然显示中缀的List,后缀的转换方法没有执行,请问大家是怎么回事
package Test;
import java.util.*;
public interface InfixConversionSuffixes {
// 首先将中缀表达式转换为对应的List
public static List toInfix (String s) {
// 定义一个list,存放对应的中缀表达式内容
List ls = new ArrayList();
// 定义指针,用于遍中缀的字符串
int i = 0;
// 每遍历到一个字符则放到c中
char c;
// 定义一个字符串,对应多位数的拼接
String str;
do {
// 假如这是一个非数字,则直接加入ls
if (s.charAt(i) < 48 || s.charAt(i)>57) {
c = s.charAt(i);
ls.add("" + c);
i++;
}else {
// 将str设置成 “ ”,准备拼接
str = "";
while (i=48 && s.charAt(i)<=57) {
c=s.charAt(i);
str += c;
i++;
}
ls.add(str);
}
} while (i// 返回ls
return ls;
}
public static List toSuffixes(List ls ) {
// 初始化两个栈
// s1为符号栈
Stack s1 = new Stack();
// s2因为没有pop操作,同时最后还需要逆输出,可直接用List代替
List s2 = new ArrayList ();
// 遍历ls,取出每一项进行逻辑判断
for (String item: ls) {
// 假如是一个数字,则直接入栈2
if (item.matches("//d+")) {
s2.add(item);
// 如果为左括号直接入s1
}else if (item.equals("(")){
s1.add(item);
// 如果为右括号,弹出s1并加入s2,直到碰到左括号为止之后弹出
}else if (s1.size()!=0 && item.equals(")")){
while(s1.size()!=0 && !s1.peek().equals("(")){
s2.add(s1.pop());
}
s1.pop();
// 是符号的话,s1如果为空或者s1最上面的为( 直接入s1
}else if(s1.size()==0||s1.peek().equals("(")){
s1.add(item);
// 如果s1不为空且s1最上面的符号小于item时也直接加入s1
}else if(s1.size()!=0 &&InfixConversionSuffixes.contrast(s1.peek())
add(item);
//// 否则将s1栈顶的运算符弹出加入s2中
} else{ while(s1.size()!=0 && InfixConversionSuffixes.contrast(s1.peek())
>= InfixConversionSuffixes.contrast(item)){
s2.add(s1.pop());
}
s1.push(item);
}
// 将s1剩余符号加入s2中
while(s1.size()!=0){
s2.add(s1.pop());
}
}
return s2;
}
public static int contrast (String s){
int result=0;
if(s.equals("+") || s.equals("-")){
result = 1;
}else if(s.equals("*") || s.equals("/")) {
result = 2;
}
return result;
}
}
没有执行转换后缀的方法内容,输出的依然是中缀的List
语法没有报错,就是执行不出来
希望大家能帮忙看看
你的主函数在哪呢
你这三个函数都没有调用执行啥呀