본문
[2017.09.14] 02. Calculator 프로젝트 [괄호X]
컴퓨터/이론: 안드로이드 2017. 9. 14. 09:30
중요 로직
괄호가 없는 경우,
Step 1. *, / 연산 우선
Step 2. 왼쪽에서 오른쪽으로 연산
조건에 따라 연산을 처리하면 된다. 그래서 아래 그림과 같이 *, / 연산을 우선 처리 후 +, - 연산을 처리했다.
문제점 및 해결
연산자(+,-,*,/)와 피연산자(숫자) 구분 문제
계산을 처리하기 위해서는 연산자와 피연산자를 구분하는 것이 필요해 연산자를 입력 받을 때 앞 뒤로 " "(공백)을 추가로 입력 받아 문제 해결, 이를 통해 1, 2, 3이 입력될 때 "1", "2", "3"이 아닌 "123"으로 처리도 가능해졌다.1234567891011121314151617181920212223242526272829@Overridepublic void onClick(View view) {switch (view.getId()) {case R.id.btn_div:case R.id.btn_plus:case R.id.btn_minus:case R.id.btn_multi:// 연산자는 앞 뒤로 공백 입력txtProcess.append(" " + ((TextView)view).getText() + " ");break;case R.id.btn_init:txtProcess.setText("");txtResult.setText("");break;case R.id.btn_result:// 결과를 계산하는 로직calcTarget = txtProcess.getText()+"";try {txtResult.setText(calc(calcTarget) + "");} catch (ArithmeticException e) {Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();}break;default:// 피연잔사는 그대로 입력txtProcess.append(((TextView)view).getText());break;}}cs - 결과 연산 시, for문 안 인덱스가 예상치 못한 데이터에 접근하는 문제
처음에는 전체 연산을 담는 변수를 ArrayList로 설정 후 부분 연산의 결과를 ArrayList에 담을 예정이었다. 그러나 for문에서 ArrayList의 size를 사용하므로 ArrayList를 추가 삭제할 경우 예상치 못한 데이터에 접근
그래서 전체 연산은 String 배열에 입력, 부분 연산은 ArrayList로 입력 받아 문제 해결
스크린 샷
#안드로이드 계산기 #사칙연산 #사칙연산 로직 #계산기 방법
'컴퓨터 > 이론: 안드로이드' 카테고리의 다른 글
[2017.09.17] 06. 안드로이드 애니메이션 (0) | 2017.09.17 |
---|---|
[2017.09.16] 05. 각종 View와 ViewGroup (0) | 2017.09.15 |
[2017.09.15] 04. Calculator 프로젝트 [괄호O - Stack 사용X] (0) | 2017.09.15 |
[2017.09.14] 03. Calculator 프로젝트 [괄호O - Stack 사용O] (6) | 2017.09.14 |
[2017.09.13] 01. Calculator 프로젝트 설명과 목적 (0) | 2017.09.13 |
댓글