자바 스택 자료구조 후위표기식과 연산 질문드립니다!


자바 입문자입니다 후위표기식의 연산값이 원하는대로 안나오네요 도와주세요 ㅠㅠ

제가원하는값은 6인데 -48이 나옵니다 ㅠㅠ

class Node{

Object data; Node link;

Node(Object data){
    this.data = data;
    this.link = null;
}

}

class LinkedStack{

Node top;

LinkedStack(){
    this.top = null;
}
boolean isEmpty() {
    return top==null;
}
void push(Object data) {
    Node newNode = new Node(data);
    newNode.link = top;
    top = newNode;
}
Object pop() {
    if(isEmpty()) {
        System.out.println("no data");
        return 0;
    }else {
        Node temp = top;
        top = temp.link;
        return temp.data;
    }
}
void delete() {
    if(isEmpty()) {
        System.out.println("no data");
    }else {
        top = top.link;
    }
}
Object peek() {
    if(isEmpty()) {
        System.out.println("no data");
        return 0;
    }else {
        return top.data;
    }
}
void printStack() {
    if(isEmpty()) {
        System.out.println("no data");
    }else {
        Node temp = top;
        while(temp != null) {
            System.out.print(temp.data + " ");
            temp = temp.link;
        }
        System.out.println();
    }
}

}

class Operate{

public static char[] toPostfix(String infix) {
    char testCh;
    int stackSize = infix.length();
    char[] postfix = new char[stackSize];
    int j=0;
    LinkedStack s = new LinkedStack();

    for(int i=0; i<stackSize; i++) {
        testCh = infix.charAt(i);
        switch(testCh) {
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                postfix[j] = testCh;
                j++;
                break;
            case '+':
            case '-':
            case '*':
            case '/':
                s.push(testCh);
                break;
            case ')':
                postfix[j] = (char)s.pop();
                j++;
                break;
            default:
        }
    }
    postfix[j] = (char)s.pop();
    return postfix;
}

public static int calPostfix(char[] postfix) {
    int opr1;
    int opr2;
    int result=0;
    LinkedStack s = new LinkedStack();

    for(int i=0; i<postfix.length; i++) {
        if(postfix[i]!='+' && postfix[i]!='-' && postfix[i]!='*' && postfix[i]!='/') {
            s.push(postfix[i]-'0');
        }else {
            if(postfix[i]=='+') {
                opr2 = (int)s.pop();
                opr1 = (int)s.pop();
                s.push(opr1+opr2);
            }else if(postfix[i]=='-') {
                opr2 = (int)s.pop();
                opr1 = (int)s.pop();
                s.push(opr1-opr2);
            }else if(postfix[i]=='*') {
                opr2 = (int)s.pop();
                opr1 = (int)s.pop();
                s.push(opr1*opr2);
            }else {
                opr2 = (int)s.pop();
                opr1 = (int)s.pop();
                s.push(opr1/opr2);
            }
        }
    }
    result = (int)s.pop();
    return result;
}

}

public class HomeWork_01{

public static void main(String[] args) {
    String infix = "(3*5)-((6/2)+(3*2))";
    System.out.println(infix);

    char[] postfix = Operate.toPostfix(infix);
    System.out.println(postfix);

    int result = Operate.calPostfix(postfix);
    System.out.println(result);
}

}


조회수 48


Hashcode banner summercoding

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close