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();
}
}
[위 코드의 실행 파일]
ps) 문자열 파싱방법을 알기 위해 작성한 코드입니다. 만약, 계산 단위를 증가 시킬려면 스택구조를 이용해 부호와 데이터를 따로 쌓은 다음 후위 계산하는 방식을 사용하면 계산 단위의 증가를 가져올 수 있습니다.
'자바(Java) > JAVA 2SE' 카테고리의 다른 글
데이터베이스에 SQL문을 수행하고 결과 얻기 (0) | 2009.01.13 |
---|---|
DriverManager 객체와 Connection 객체 (0) | 2009.01.13 |
JDBC를 사용하여 데이터베이스와 연결하는 방법 (0) | 2009.01.12 |
애플릿(Applet)이란? (0) | 2009.01.07 |
10진수를 2진수로 전환하는 프로그램 (0) | 2008.11.19 |