본문 바로가기

app/java

java postpix 후위연산자

package com.my;

public class postpix {

    stack stack = new stack();
    
    public String postpixCal(String str){       
        
        for(int i = 0; i <str.length(); i++){
            String cstr = str.substring(i, i+1);
            
            if(cstr.equals("+") || cstr.equals("-") ||  cstr.equals("*") || cstr.equals("/")
                    ||  cstr.equals("(") || cstr.equals(")")){
                chackCal(cstr);
               // stack.input(cstr);
            }else{
                System.out.print(cstr);
            }            
        }       
        
        if(stack.outputMaxNumber() > 0){
            for(int i = stack.outputMaxNumber(); i >0 ; i--)
                System.out.print(stack.output());
            
        }
     
        return str;
    }
     
    public void chackCal(String str){
        
        if(str.equals("(")){
            stack.input(str);
        }else if(str.equals(")")){
            int stackSize = stack.outputMaxNumber();
            for(int j = stackSize; j > 0 ; j--){
               if(stack.output(j).equals("(")){                  
                   stack.output();
                   break;
               }
                System.out.print(stack.output());
            }
        }else  if(str.equals("*") || str.equals("/")){
            int stackSize = stack.outputMaxNumber();
            for(int j = stackSize; j > 0 ; j--){
               if((stack.output(j).equals("("))){
                   break;
               }else if((stack.output(j).equals("*")) || (stack.output(j).equals("/")) ){
                   System.out.print(stack.output());
                    break;
                    }              
            }
            stack.input(str);
        }else if(str.equals("+") || str.equals("-")){
            int stackSize = stack.outputMaxNumber();
            
            for(int j = stackSize; j > 0 ; j--){
                if((stack.output(j).equals("("))){
                    break;
                }else if((stack.output(j).equals("*")) || (stack.output(j).equals("/")) ){
                   System.out.print(stack.output());                   
               }else if((stack.output(j).equals("-")) || (stack.output(j).equals("+")) ){
                   System.out.print(stack.output()); 
                   break;
               }
            }
            stack.input(str); 
        }
    }
    
    
    public static void main(String[] args) {
        postpix pp = new postpix();
        String str = "((A+B)*(c+d/p-z))*t/o";
        pp.postpixCal(str);
        
    }
}



- 대략 3시간만에 만들긴 한건데....
- 그저께 했던 스택이 있어야 한다.
- 문제는 -0- 제대로 돌아간다는게 신기해... 내가 만들었지만 않돌아가야하거든? 근데 잘돌아가.-_-;;; 
- 저 복잡한거 함수로 따로 빼고싶다..ㅜㅡㅜ 근데 시간이 없다.