퀵바


강호정담

우리 모두 웃어봐요! 우리들의 이야기로.



작성자
Lv.1 레밍무적
작성
04.05.04 21:50
조회
336

자바로 구현한 소슨데..ㅠ.ㅠ(정확히 자료구조~)

에러는 안남니다..근데 실질적으로 실행해 보면 원하는 결과가 안나오네요..

스택관련된 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


댓글쓰기
0 / 3000
회원가입

강호정담 게시판
번호 제목 글쓴이 날짜 조회
20599 [펌] 당신은 대한민국의 영부인 이십니다. +4 Lv.1 푸른이삭2 04.03.27 680
20598 [盜]3. 27 탄핵무효 국민행동 전국 일정표입니다. Lv.1 명주잠자리 04.03.27 358
20597 웃음의 34가지 테크닉 +4 미소창고㉿ 04.03.27 631
20596 [[고졸출신은 국모가 될수없다?]] 어제 TV 문제의 부분예... +6 Lv.1 레밍무적 04.03.27 1,008
20595 탄핵 찬성 집회에서 영부인에게 욕하는 동영상 +3 Lv.5 전고 04.03.27 634
20594 [펌]증명사진 찍기 +1 Lv.7 퀘스트 04.03.27 517
20593 [펌]대통령의 편지-청남대에서 +3 Lv.6 萬波息笛 04.03.27 607
20592 오늘 MBC에서 방송한 "신강균의......사실은" +7 Lv.1 잘생긴님 04.03.27 907
20591 고등학교도 안나온 여자가.. +13 과테말라 04.03.27 901
20590 내일 탄핵반대집회 시간나시는 분들 꼭 참석합시다 +3 Lv.1 매트릭스 04.03.27 444
20589 [猪story] 쩝.... +6 둔저 04.03.27 572
20588 [츄리닝] 조자룡 +6 Lv.52 군림동네 04.03.27 500
20587 사조영웅전 이벤트 당첨자 공지에 대해 궁금하신분.. +1 유산 04.03.26 327
20586 봄도 오고 해서... 아바타 변경-_- +3 류민 04.03.26 235
20585 저기 아래에 무협을 추천해주시는 선생님하니까 생각난 ... +4 변화무쌍 04.03.26 328
20584 황제의검 +4 Lv.5 風神流 04.03.26 331
20583 저기여...사조영웅문이벤트..그거 발표언제해여? +4 Lv.1 쿤산 04.03.26 304
20582 국가예산에서 국회의원 봉급이 차지하는 비율? +9 과테말라 04.03.26 558
20581 [아침신문]에 송진용님 소설이? +2 Lv.1 레밍무적 04.03.26 707
20580 [盜]2004년 3월 12일, 국회 본회의 속기록 +3 Lv.1 명주잠자리 04.03.26 362
20579 나는야 일요일날 야구보러 간다네..;; +4 Lv.1 술퍼교교주 04.03.26 391
20578 fools1님의 '제3회 CSK배 중국 우승 뒤 중국언론보도' 번역. +4 Lv.12 소매치기 04.03.26 533
20577 이걸로 똥꼬 딱으면..... +9 미소창고㉿ 04.03.26 811
20576 사랑 10계명 +2 미소창고㉿ 04.03.26 308
20575 [게임] 내공 10갑자 이상만 가능합니다. ^^ +17 세네카 04.03.26 676
20574 신동아 4월호에 '좌백' 얘기가... +10 Lv.20 jangnoru 04.03.26 936
20573 과연 촛불시위가 불법인가? +8 Lv.99 성성성성 04.03.26 437
20572 좌욕용 건강 빨래판 +2 Lv.34 삿갓선생 04.03.26 413
20571 공동구매 목록아 빨리 뜨거라!!! Lv.1 낙산 04.03.26 266
20570 우리는 일본을 모르고 일본도 한국을 모른다. +6 Lv.84 x타파샤x 04.03.26 592

신고 사유를 선택하세요.
장난 또는 허위 신고시 불이익을 받을 수 있으며,
작품 신고의 경우 저작권자에게 익명으로 신고 내용이
전달될 수 있습니다.

신고
@genre @title
> @subject @time