▶ 오늘의 ISSUE
오늘은 계산기를 만들어보는 날입니다. 특정 요구사항들을 충족시키면서 만들어야 하는 개인 프로젝트 과제입니다.
▶ 요구사항
- 양의 정수(2개)를 입력받기 (Scanner 사용)
- 사칙연산 기호(+,-,*,/)를 입력받기 (Scanner 사용)
- 입력받은 데이터를 토대로 연산 진행 후 결과값 저장 및 출력 (ArrayList, if, switch 사용)
- 반복문은 종료를 알려주는 "exit" 문자열을 입력받을 때만 종료 (while문 사용)
- 연산 수행 및 결과값 반환 메서드 & 연산 결과를 저장하는 Calculator Class 생성
- App Class에서 Calculator Class 활용
- Calculator Class의 연산 결과를 저장하고 있는 필드에 접근하지 못하도록 캡슐화
- Calculator Class에 저장된 연산 결과들 중 가장 먼저(or 원하는 결과값) 저장된 데이터를 삭제하는 기능 구현 + App Class에서 해당 메서드 활용
▶ 소스코드
App Class
import java.util.*;
public class App {
public static void main(String[] args) {
Calculator calc = new Calculator(); // 연산 수행 및 결과 반환, 저장하는 인스턴스 생성
Scanner sc = new Scanner(System.in);
boolean checking = true; // 반복문 종료를 위한 변수
int num1; // 첫 번째 입력값 저장 변수
int num2; // 두 번째 입력값 저장 변수
while (checking) { // 연산 반복 수행
System.out.print("연산기호를 입력해주세요. : ");
String str = sc.nextLine();
System.out.print("첫 번째 값을 입력해주세요. : ");
try { // 잘못 입력된 값에 대한 오류처리
num1 = Integer.parseInt(sc.nextLine());
if(num1 < 0) {
System.out.println("0 미만의 수는 입력할 수 없습니다.");
continue;
}
} catch (Exception e) {
System.out.println("값을 다시 입력해주세요.");
continue;
}
System.out.print("두 번째 값을 입력해주세요. : ");
try { // 잘못 입력된 값에 대한 오류처리
num2 = Integer.parseInt(sc.nextLine());
if(num2 <= 0) {
System.out.println("0 이하의 수는 입력할 수 없습니다.");
continue;
}
} catch (Exception e) {
System.out.println("값을 다시 입력해주세요.");
continue;
}
calc.setcalc(str, num1, num2); // 입력받은 값 셋팅 후 결과값 저장
System.out.println(calc.getResult()); // Calculator에 저장된 결과값 불러오기
System.out.print("계속 진행(1) / 종료(2) / 삭제(3) 번호 입력 :");
String check = sc.nextLine(); // 진행 여부 체크
switch (check) {
case "1" : // 계속 진행
continue;
case "2" : // chechking에 false값을 줌으로써 while문 종료
checking = false;
break;
case "3" : // 저장된 값 중에 원하는 값 삭제하기 + 중복포함,미포함
System.out.print("삭제할 값을 입력하세요 :");
double delnum = Double.parseDouble(sc.nextLine());
System.out.print("중복값 포함(1) / 미포함(2) 번호 입력 :");
int all = Integer.parseInt(sc.nextLine());
calc.delete(all, delnum); // 삭제 메서드
break;
default : // 잘못 입력 시 처음으로 이동
System.out.println("잘못입력하셨습니다. 처음으로 돌아갑니다.");
}
}
}
}
Calculator Class
import java.util.*;
public class Calculator { // 연산 수행 및 저장 + 결과값 반환
private final ArrayList<Double> result = new ArrayList<>();
private String operation; // 연산 기호 저장
private int num1; // 첫 번째 값 저장
private int num2; // 두 번째 값 저장
private double sum; // ArrayList에 담기 위한 결과값 임시 저장
public int error; // 목록에 없는 연산기호 입력 시 초기로 이동
public double getResult() { // ArrayList에 저장된 결과값 반환
int lastindex = result.size() - 1; // \n값 때문에 -1 계산 후 저장
if(lastindex < 0 || error == 1) { // ArrayList 값이 없거나 에러값이 1이면 0값 리턴
return 0;
} else {
return result.get(lastindex);
}
}
public void setcalc(String operation, int num1, int num2) { // 연산 셋팅
this.operation = operation;
this.num1 = num1;
this.num2 = num2;
calculate();
}
public void delete(int set, double num) { // 지정된 결과값 ArrayList에서 삭제
boolean chk;
if(!result.contains(num)){
System.out.println("해당 값은 존재하지 않습니다.");
} else {
if (set == 1) { // 중복값 포함 제거
chk = result.removeAll(Arrays.asList(Double.valueOf(num)));
if (chk) System.out.println("정상적으로 삭제되었습니다." + record());
} else if (set == 2) { // 중복값 미포함 제거
chk = result.remove(Double.valueOf(num));
if (chk) System.out.println("정상적으로 삭제되었습니다." + record());
}
}
}
public ArrayList<Double> record() { // 삭제 후 저장내역 확인 용도
return result;
}
public void calculate() { // 연산 수행 및 결과값 저장 + 반환
error = 0;
switch (operation) {
case "+" :
sum = num1 + num2;
result.add(sum);
break;
case "-" :
sum = num1 - num2;
result.add(sum);
break;
case "*" :
sum = num1 * num2;
result.add(sum);
break;
case "/" :
sum = num1 / num2;
result.add(sum);
break;
default :
System.out.println("해당 연산기호는 사용이 불가능합니다.");
error = 1;
}
}
}
▶ 실행결과
▶ 프로젝트 회고
문제점
- switch - while 트러블 발생
while
문과switch
문의break
중복 문제 발생switch
안에서 해결이 불가해 boolean 변수를 사용해 문제 해결
- 초기값을 입력하지 않았을 때 발생하는 문제
- 값을 입력하지 않으면 오류가 발생하는 문제를 예외 처리
- Calculator 클래스의 변수가 초기화되지 않는 문제
- 상위에 선언된 변수들이 초기화되지 않아 메서드에서 따로 초기화를 진행
'Project' 카테고리의 다른 글
개인 프로젝트 : 일정 관리 앱 JPA ver (0) | 2024.10.16 |
---|---|
개인 프로젝트 : 일정 관리 앱 Lv 3 (0) | 2024.10.04 |
개인 프로젝트 : 숫자 야구 게임 만들기 Lv 4 (0) | 2024.09.23 |
팀 프로젝트 : 우리 팀, 우리만의 이야기를 담을 수 있는 "팀 소개 웹페이지" 만들기 (0) | 2024.09.19 |