퀵바


강호정담

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



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

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

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

스택관련된 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
회원가입

강호정담 게시판
번호 제목 글쓴이 날짜 조회
21580 오오 진가소전....ㅡㅠ +5 Lv.99 잊어버린꿈 04.05.04 529
21579 노래추천받습니다. 이번에 바이러스 걸려서...노래있던거... +14 용마 04.05.04 279
21578 좋은 시와 나쁜시 +6 風靈刃 04.05.04 245
21577 아니? 채팅 방에서들 뭘하는 겨? +4 Personacon 금강 04.05.04 386
» 컴퓨터 고수님들~특히 자바고수님들~!!꼭봐주세요~! Lv.1 레밍무적 04.05.04 335
21575 [퍼옴]`여성 증오' 길 가던 주부 흉기로 찔러 중태 +9 Lv.1 미우 04.05.04 339
21574 어린이날 아이들이 귀찮으신 분들을 위한 대비책 +4 Lv.1 [탈퇴계정] 04.05.04 423
21573 왜 세상은 이런거죠? +11 Lv.1 무영검신 04.05.04 692
21572 일본애들이 깜짝 놀라자빠질.... +4 리징이상훈 04.05.04 762
21571 오늘 시험이 끝났습니다..그중에.. +11 Lv.39 파천러브 04.05.04 284
21570 으악!! 바이러스에 감염 되었네요. 컴고수님들 도움좀... +5 통연 04.05.04 347
21569 [펌] 생각의 글귀 +1 Lv.1 브래드피트 04.05.04 203
21568 [펌]전화번호부에서 검색한 재미난 이름입니다. +13 Lv.23 인의예지 04.05.04 514
21567 515 행사의 장소가 결정되었습니다. +6 Lv.1 별도 04.05.04 299
21566 [펌]미군헬기에서 이라크인 사살장면이라는군요. +3 Lv.23 인의예지 04.05.04 500
21565 서울시 영어 상용화?? +6 Lv.23 어린쥐 04.05.04 310
21564 뒤북 뉴스 ! 채팅방에! +3 Lv.56 치우천왕 04.05.04 251
21563 저기 이런질문 죄송하지만 조금 가르쳐주세요 ^^ (컴퓨터... +3 Lv.35 대장장이 04.05.04 218
21562 책이 도착했네요^^ Lv.18 永世第一尊 04.05.04 398
21561 515사인회 자원봉사자 여러분에게 알려드립니다. +3 Lv.1 별도 04.05.04 403
21560 日 극우단체 독도 상륙 시도.. +3 Lv.1 설랑 04.05.04 488
21559 시원한 노래!!! summerwine !!! +3 리징이상훈 04.05.04 403
21558 술퍼 이벤뚜 마감임박..^^* +9 Lv.1 술퍼교교주 04.05.04 236
21557 아래 펌글 지웠습니다. +1 Lv.7 퀘스트 04.05.04 245
21556 1차정기휴가... +1 오지영 04.05.04 210
21555 초등학생이 알몸 채팅까지 +7 Lv.39 파천러브 04.05.04 819
21554 세남매 장기 방치...부모 자취 감춰.. +3 Lv.39 파천러브 04.05.04 342
21553 [펌] 추억의 허리케인블루 She's gone +7 Lv.14 Dainz 04.05.04 509
21552 펌 - 행크 블레이락 Lv.1 별이달이 04.05.04 363
21551 s. o. s +9 Lv.56 치우천왕 04.05.04 464

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

신고
@genre @title
> @subject @time