转变为逆波兰表示式的代码报错:堆栈溢出,怎么解决?

新手上路,请多包涵
  1. import java.util.Stack;  
  2. import javax.swing.text.ChangedCharSetException;  
  3. publicclass T {  
  4.     publicstaticvoid main(String[] args){  
  5.          System.out.print("请输入算式(测试):");  
  6.          Scanner sc=new Scanner(System.in);  
  7.             String formula=sc.nextLine();  
  8.             System.out.print(change(formula));  
  9.     }  
  10. publicstatic Stack<String> change(String expression) {  
  11.                 Stack<Character> s1=new Stack<>();s1.push('#');  
  12.                 Stack<String> s2=new Stack<>();  
  13.                 char[] chars=expression.toCharArray();  
  14.                 StringBuffer s=new StringBuffer();  
  15.                 for(int i=0;i<chars.length;i++) {  
  16.                     if(Character.isDigit(chars[i])) {  
  17.                         while(Character.isDigit(chars[i])||chars[i]=='.') {  
  18.                             s.append(chars[i]);  
  19.                             }s2.push(s.toString());  
  20.                     }  
  21.                     else {  
  22.                         switch(chars[i]){  
  23.                             case'(':s1.push(chars[i]);break;  
  24.                             case')':while(!s1.peek().equals('(')){  
  25.                                     s2.push(s1.pop().toString());  
  26.                                     }  
  27.                                 s1.pop();break;  
  28.                             case'+':  
  29.                             case'-':  
  30.                             case'/':  
  31.                             case'*':;  
  32.                                     s1.push(chars[i]);  
  33.                                     if(get(chars[i+1])>get(chars[i])) {  
  34.                                         s1.push(chars[i+1]);  
  35.                                     }else {  
  36.                                         s2.push(s1.peek().toString());  
  37.                                     }  
  38.                                         }  
  39.                         }  
  40.                 }return s2;  
  41.             }  
  42.             publicstaticint get(char c)  
  43.                     {    int m=0;  
  44.                             switch(c) {  
  45.                             case'+':  
  46.                             case'-':m=1;break;  
  47.                             case'/':  
  48.                             case'*':m=2;break;  
  49.                             case'(':  
  50.                             case')':m=0;break;  
  51.                             case'#':m=-1;break;}  
  52.                             return m;  
  53.                         }     
  54. }
阅读 758
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题