클래스 Calculator (계산 기능을 수행하는 클래스)
public class Calculator {
private List<Double> resultHistory = new ArrayList<>(); // 결과 값을 저장할 리스트
public double calculate(double num1, double num2, String op) { // 계산 메서드
double result =- 0;
switch (op) { // Step1과 동일하나 0으로 나눌 수 없는 예외를 메서드에서 처리
case "+" -> result = num1 + num2;
case "-" -> result = num1 - num2;
case "*" -> result = num1 * num2;
case "/" -> {
if (num2 == 0) {
System.out.println("0으로 나눌 수 없습니다.");
} else {
result = num1 / num2;
}
}
default -> System.out.println("정확한 연산자를 입력해주세요");
}
resultHistory.add(result); // 결과 값을 리스트에 저장
return result; // 결과를 반환
}
public List<Double> getResultHistory() { // getter를 통해 리스트를 새로운 리스트로 반환
return new ArrayList<>(resultHistory);
}
public void removeResult() { // setter를 통해 최근 내용이 지워진 새로운 리스트 반환
if (!resultHistory.isEmpty()) {
resultHistory.remove(0);
}
}
}
클래스 App(계산기가 작동하는 클래스)
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); // Step1과 동일
Calculator calc = new Calculator(); // Calculator 클래스에서 새로운 객체를 생성
while (true) {
double num1;
try {
System.out.println("첫 번째 숫자를 입력하세요: ");
num1 = sc.nextDouble();
} catch (InputMismatchException e) {
System.out.println("숫자를 입력하세요.");
sc.nextLine();
continue;
}
double num2;
try {
System.out.println("두 번째 숫자를 입력하세요: ");
num2 = sc.nextDouble();
} catch (InputMismatchException e) {
System.out.println("숫자를 입력하세요.");
sc.nextLine();
continue;
}
System.out.println("연산자를 입력하세요 (+,-,*,/): ");
String op = sc.next();
double result = calc.calculate(num1, num2, op);// Calculator 클래스의 메서드를 활용하여 계산
System.out.println("결과 : " + result);
System.out.println("지금까지의 계산 결과: " + calc.getResultHistory()); // getter를 통해 리스트 새로 생성
System.out.println("결과를 삭제하시겠습니까? (Y/N): ");
String delete = sc.next();
if (delete.equalsIgnoreCase("Y")) {
calc.removeResult();
System.out.println("결과가 삭제되었습니다.");
System.out.println("남은 결과: " + calc.getResultHistory()); // setter를 통해 최근 결과가 지워진 새로운 리스트 생성
} else {
System.out.println("결과가 유지됩니다.");
}
System.out.println("계산을 계속하시겠습니까? (Y/N): ");
String again = sc.next();
if (again.equalsIgnoreCase("N")) {
break;
}
}
System.out.println("계산을 종료합니다.");
sc.close();
}
}