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- 제대로 돌아간다는게 신기해... 내가 만들었지만 않돌아가야하거든? 근데 잘돌아가.-_-;;;
- 저 복잡한거 함수로 따로 빼고싶다..ㅜㅡㅜ 근데 시간이 없다.
'app > java' 카테고리의 다른 글
if 문에 대한 단상 (0) | 2011.10.29 |
---|---|
-Djava.endorsed.dirs= 을 찾을수 없습니다. 두번째! (0) | 2011.05.24 |
java class 파일 디컴파일 프로그램 (2) | 2011.03.14 |
java.lang.NumberFormatException: For input string (4) | 2011.02.06 |
중복 없는 랜덤 숫자 뽑기 (0) | 2011.01.02 |