자바(Java)/JAVA 2SE

계산기 프로그램

본클라쓰 2008. 11. 19. 15:38

 

1. 설명 : 계산식을 문자열로 입력받아 문자열 파싱을 거친 후 계산을 수행한 후 결과값을 출력하는 프로그램으로 계산식을 문자열로 받아 처리함. (계산식은 두 개의 수화 한개의 부호만 처리함)

2. 입출력 방법 : JDialog 객체 사용

3. 핵심 : StringTokenizer 클래스를 사용한 문자열 파싱

 // StringTokenizer 클래스를 사용하여 수식을 기준으로 파싱

 // 수식을 찾는 방법은 먼저 문자열을 모두 비교하여+,-,*,/ 와 일치하는 수식을 찾음

  StringTokenizer st=new StringTokenizer(input, ""+operator);      
  previous=st.nextToken(); 
  other=st.nextToken();

                               

                               <  입력 메세지 >                                      < 출력 메세지 >      

 

 

소스 코드

import java.util.StringTokenizer;
import javax.swing.JOptionPane;


public class Calculator {

 

    private String input = null;
    private int previousValue = 0;
    private char operator;
    private int nextValue = 0;
    private int result = 0;

 

    public Calculator(){
        this.input = JOptionPane.showInputDialog("계산식을 입력하세요 ex)10+10 ");
    }

 

    /* 
     * 설명 : 입력식에서 부호를 검색
     * 방법 : 검색시 문자 단위별로 검색하여 정수 범위 밖이면 부호로 간주
    */
    public void searchOper(){

 

        for( int i=0 ; i < this.input.length() ; i++){ 
            if ( (this.input.charAt(i)>=48) && (this.input.charAt(i)<=57) ){
                continue;
            } else {
                operator=this.input.charAt(i);
                break;
            }
        }
    }

 

    /*
     * 설명 : 검색된 부호를 기준으로 앞수와 뒷수를 구분하여 저장
     */
    public void parsing(){
  
        String oper = operator+"";
  
        StringTokenizer st = new StringTokenizer(input, oper);
        previousValue = Integer.parseInt( st.nextToken() );
        nextValue = Integer.parseInt( st.nextToken() );
    }
 
    /* 
     * 설명 : 계산
     */
    public void calculation(){


        if(operator=='+'){
            result = previousValue + nextValue;
        }else if(operator=='-'){
            result = previousValue - nextValue;
        }else if(operator=='/'){
            result = previousValue / nextValue;
        }else if(operator=='*'){
            result = previousValue * nextValue;
        }else if(operator=='%'){
            result = previousValue % nextValue;
        }else{
            JOptionPane.showMessageDialog(null, "error : 입력오류");
        }
  
        JOptionPane.showMessageDialog(null, "계산 결과 =  "+result);
  
    }
 

    public static void main(String[] args) {
  
        Calculator calculator = new Calculator();
        calculator.searchOper();
        calculator.parsing();
        calculator.calculation();
    }


}

 

[위 코드의 실행 파일]  

Calculator.jar

 

ps)  문자열 파싱방법을 알기 위해 작성한 코드입니다. 만약, 계산 단위를 증가 시킬려면 스택구조를 이용해 부호와 데이터를 따로 쌓은 다음 후위 계산하는 방식을 사용하면 계산 단위의 증가를 가져올 수 있습니다.

 

 

 

 

Calculator.jar
0.0MB