퀵바


강호정담

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



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

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

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

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

강호정담 게시판
번호 제목 글쓴이 날짜 조회
21597 오늘 어린애들과 놀아주면서... +2 둔저 04.05.05 237
21596 스카이 프로리그... +2 가림토검사 04.05.05 415
21595 자연을 보아요^^ +2 Lv.15 千金笑묵혼 04.05.05 238
21594 방금 주전자를 태워먹었습니다;;; +5 Lv.18 永世第一尊 04.05.05 477
21593 죄송합니다. +11 수류연 04.05.05 419
21592 몽유강호기 Lv.1 우 현 04.05.05 272
21591 어린이날 선물은 '불티'…어버이날 선물은 '불황' +2 Lv.39 파천러브 04.05.05 321
21590 삼성증권배 프로야구를 본뜬 '2004 한국바둑리그'가 다음... +3 Lv.12 소매치기 04.05.05 296
21589 마음의 수련에 적합한 그란디아2 오늘로서 다깼네... 휴~... +6 Lv.18 永世第一尊 04.05.05 330
21588 격투기에 빠져버린 환사- _- +13 ▶◀幻士 04.05.05 465
21587 간단한 치료법 소개합니다. +2 Lv.1 전설과신화 04.05.05 335
21586 사세르에 관한 질문(컴고수분들께) +3 통연 04.05.05 412
21585 왕년의 18번 : Besame Mucho +2 리징이상훈 04.05.05 272
21584 우조아의 스키마의 잘못된 영어회화표현 +4 Lv.65 동심童心 04.05.05 439
21583 [잡담] 엄청엄청...덥습니다. +3 Lv.65 동심童心 04.05.05 218
21582 무협에 대한 한가지 제안~ +5 유무상동 04.05.05 437
21581 흥미거리 발견. +4 촉풍 04.05.05 434
21580 오오 진가소전....ㅡㅠ +5 Lv.99 잊어버린꿈 04.05.04 530
21579 노래추천받습니다. 이번에 바이러스 걸려서...노래있던거... +14 용마 04.05.04 280
21578 좋은 시와 나쁜시 +6 風靈刃 04.05.04 246
21577 아니? 채팅 방에서들 뭘하는 겨? +4 Personacon 금강 04.05.04 387
» 컴퓨터 고수님들~특히 자바고수님들~!!꼭봐주세요~! Lv.1 레밍무적 04.05.04 337
21575 [퍼옴]`여성 증오' 길 가던 주부 흉기로 찔러 중태 +9 Lv.1 미우 04.05.04 340
21574 어린이날 아이들이 귀찮으신 분들을 위한 대비책 +4 Lv.1 [탈퇴계정] 04.05.04 425
21573 왜 세상은 이런거죠? +11 Lv.1 무영검신 04.05.04 694
21572 일본애들이 깜짝 놀라자빠질.... +4 리징이상훈 04.05.04 764
21571 오늘 시험이 끝났습니다..그중에.. +11 Lv.39 파천러브 04.05.04 286
21570 으악!! 바이러스에 감염 되었네요. 컴고수님들 도움좀... +5 통연 04.05.04 350
21569 [펌] 생각의 글귀 +1 Lv.1 브래드피트 04.05.04 205
21568 [펌]전화번호부에서 검색한 재미난 이름입니다. +13 Lv.23 인의예지 04.05.04 516

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

신고
@genre @title
> @subject @time