자바로 구현한 소슨데..ㅠ.ㅠ(정확히 자료구조~)
에러는 안남니다..근데 실질적으로 실행해 보면 원하는 결과가 안나오네요..
스택관련된 postfix 계산하는 건데 '+'같은 사칙연산 수행시
오퍼레이터 입력시 2개 pop해서 계산해서 그 값을 push하려고 하는데..
일단 pop해서 계산된 값이 맨 마지막에 오는게 아니라 마지막 값이 삭제돼지 않아서 끝자리 바로 앞에 나타나 있네요..이걸 어떻게 수정해야할지..
그리고 '+'를 제외한 모든 식이 제대로 된 계산이 안나오네요..어디서 잘못됐는지
자바고수님들..ㅠ.ㅠ; 조언부탁 드립니다~!(case '+', '-', '/', '*'부분이욧~!)
밑에껀 제가 작성한 소스입니다.
============
import java.io.*;
interface Stack {
boolean isEmpty();
void stackFull();
void push(String x);
String pop();
void displayArrSt();
}
class ArrayPostfix implements Stack {
private int top;
private int stackSize;
private int increment;
public String[] itemArray;
public ArrayPostfix() {
top = -1;
stackSize = 50;
increment = 10;
itemArray = new String[stackSize];
} // end ArrayPostfix()
public boolean isEmpty() {
return top == -1;
} // end isEmpty()
public void stackFull() {
stackSize += increment;
String[] tempArray = new String[stackSize];
for (int i = 0; i <= top; i++)
tempArray[i] = itemArray[i];
itemArray = tempArray;
} // end stackFull()
public void push(String x) {
if(top==stackSize-1)
stackFull();
itemArray[++top]=x;
} // end push()
public String pop() {
if(isEmpty()) return null;
else
{
String item;
item=itemArray[top];
--top;
return item;
}
} // end pop()
public void displayArrSt() {
int arr=0;
while(itemArray[arr]!=null){
System.out.print(itemArray[arr]+" ");
arr++;
}
} // end displayArrSt()
} //end ArrayStack class
public class ArrayPostfixM {
public static void main(String args[]) throws Exception{
int k, k2, arr;
char readChar, temp;
boolean bool = true;
ArrayPostfix sta = new ArrayPostfix();
while(bool){
System.out.println("*********************** MENU ********************************************");
System.out.println("+: plus, -: minus, *: multiply, /: divide, o: oprand, d: display, x: exit");
System.out.println("*************************************************************************");
System.out.print("Choose Operation?" + " ");
k = System.in.read();
readChar = (char)k;
k2 = System.in.read();
k2 = System.in.read();
switch(readChar){
case 'o':
System.out.print("Enter the number : ");
k = System.in.read();
temp = (char)k;
k2 = System.in.read();
k2 = System.in.read();
sta.push(""+temp);
sta.displayArrSt();
System.out.println();
break;
case '+':
k=Integer.parseInt(sta.pop());
k2=Integer.parseInt(sta.pop());
arr=k+k2;
temp=(char)arr;
sta.push(" "+Integer.toString(temp));
sta.displayArrSt();
System.out.println();
break;
case '-':
k=Integer.parseInt(sta.pop());
k2=Integer.parseInt(sta.pop());
arr=k-k2;
temp=(char)arr;
sta.push(" "+Integer.toString(temp));
sta.displayArrSt();
System.out.println();
break;
case '*':
k=Integer.parseInt(sta.pop());
k2=Integer.parseInt(sta.pop());
arr=k*k2;
temp=(char)arr;
sta.push(" "+Integer.toString(temp));
sta.displayArrSt();
System.out.println();
break;
case '/':
k=Integer.parseInt(sta.pop());
k2=Integer.parseInt(sta.pop());
arr=k/k2;
temp=(char)arr;
sta.push(" "+Integer.toString(temp));
sta.displayArrSt();
System.out.println();
break;
case 'd':
sta.displayArrSt();
System.out.println();
break;
case 'x':
bool = false;
break;
default :
System.out.println("Wrong Input!!");
break;
} // end switch
} // end while
} // end main
} // end class ArrayPostfixM
Comment ' 0