관리 메뉴

NineTwo meet you

[Java] 토이 프로젝트 1 : 계산기 만들기 - 예외처리 본문

프로그래밍언어/자바

[Java] 토이 프로젝트 1 : 계산기 만들기 - 예외처리

NineTwo 2021. 1. 2. 18:43
반응형

2021/01/02 - [자바] - [Java] 토이 프로젝트 1 : 계산기 만들기 - 후위 표기법 이용

 

[Java] 토이 프로젝트 1 : 계산기 만들기 - 후위 표기법 이용

Eclipse의 플러그인 windowbuilder를 사용해 계산기를 만들었다. 계산기의 형태는 Google에 계산기를 검색했을때 나오는 다음 그림을 참고했다. 내가 완성한 계산기의 모습은 다음과 같다. 계산기를 구

settembre.tistory.com

에 이어서 예외처리에 대한 포스팅을 한다.

 

1. AC 처리

if(cur.equals("AC")) { //AllClear
	this.label.setText("0");
}

2. 첫 입력이 0일 때

else if(this.label.getText().equals("0") && (cur.equals("0") || cur.equals(")"))){
	this.label.setText("0");
}

3. ")" 일 경우

  • 첫 입력으로 주어진 경우 => 입력 안됨
  • 바로 앞 글자가 "(" 또는 "%"를 제외한 연산자인 경우 => 입력 안됨
  •  
else if(cur.equals(")")){
	char preString = this.label.getText().charAt(this.label.getText().length()-1);
	if(preString == '(' || preString == '+' || preString == '-' || preString == 'X' || preString == '/') { 
		this.label.setText(this.label.getText());
	}else {
		this.label.setText(this.label.getText() + this.text);
	}
}

4. 연산자일 경우

  • 첫입력으로 주어진 경우 => "-"는 음수 처리, 나머지 연산자는 0 붙여 주기
  • 연산자 중복으로 입력된 경우 => 이전 연산자 대신 새로 입력된 연산자 입력
// -로 시작하는 경우 예외 처리
if(str.charAt(0) == '-') {
	str = "0" + str;
}
else if(cur.equals("+") || cur.equals("-") || cur.equals("X") || cur.equals("/") || cur.equals("%")){
	char preString = this.label.getText().charAt(this.label.getText().length()-1);
				
	if(this.label.getText().equals("0")) { // 아무 숫자도 입력되지 않았을 경우
		if(cur.equals("-")) {
			this.label.setText(this.text);
		}else {
			this.label.setText(this.label.getText() + this.text);
		}
	}else {
		if(cur.equals("%")) {
			if(preString == '+' || preString == '-' || preString == 'X' || preString == '/') { // 앞문자가 숫자가 아니라면
				this.label.setText(this.label.getText().subSequence(0, this.label.getText().length()-1) + this.text);
			}else {
				this.label.setText(this.label.getText() + this.text);
			}
		}else { // '+', '-', 'X', '/' 연산자 인 경우
			if(preString == '+' || preString == '-' || preString == 'X' || preString == '/'){
				this.label.setText(this.label.getText().subSequence(0, this.label.getText().length()-1) + this.text);
			}else {
				this.label.setText(this.label.getText() + this.text);
			}
		}
	}
}

5. 올바른 괄호인지 체크

// 올바른 괄호인지 판단
	static boolean checkCorrectBracket(String str) {
		Stack<Character> check = new Stack<>();
		
		for(int i = 0; i < str.length(); i++) {
			if(str.charAt(i) == '(') {
				check.push('(');
			}else if(str.charAt(i) == ')') {
				if(!check.isEmpty()) {
					check.pop();
				}else {
					return false;
				}
			}
		}
		
		if(check.isEmpty()) {
			return true;
		}else {
			return false;
		}
	}
//올바른 괄호가 아니면 Error 메시지 출력
if(!checkCorrectBracket(str)) { 
	return "Bracket Error";
}

전체 코드는 github에서 확인할 수 있다.

반응형
Comments