package com.example.calculator3;
import java.util.LinkedList;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
ArithmeticCalculator cal = new ArithmeticCalculator();
boolean reVal = true;
double result = 0;
while (reVal) {
System.out.print("계산할 첫번째 숫자를 입력하세요! : ");
double a = scan.nextDouble();
System.out.print("계산할 두번째 숫자를 입력하세요! : ");
double b = scan.nextDouble();
System.out.print("사칙연산 기호를 입력하세요! : ");
String c = scan.next();
char allSym = c.charAt(0);
cal.calculate(a, b, allSym);
LinkedList<Double> results = cal.getResultData();
if (results.size() > 6)
cal.setRemoveFirstResult();
System.out.printf("결과 : %.2f\n", results.getLast());
System.out.println("========================");
System.out.println("전체 계산 기록: " + results);
System.out.println();
System.out.println("더 계산하시겠습니까? (exit 입력 시 종료) : ");
String rework = scan.next();
if (rework.equals("exit")) {
reVal = false;
}
}
}
}
package com.example.calculator3;
import java.util.LinkedList;
public class ArithmeticCalculator {
private LinkedList<Double> resultData = new LinkedList<>();
public LinkedList<Double> getResultData() {
return resultData;
}
public void setRemoveFirstResult() {
if (!resultData.isEmpty()) {
resultData.removeFirst();
}
}
public <T extends Number> void calculate(T a, T b, char symbol) {
OperatorType operator = OperatorType.fromSymbol(symbol);
double result = operator.calculate(a, b);
resultData.add(result);
}
}
package com.example.calculator3;
public enum OperatorType {
PLUS('+') {
@Override
public <T extends Number> double calculate(T a, T b) {
return a.doubleValue() + b.doubleValue();
}
},
MINUS('-') {
@Override
public <T extends Number> double calculate(T a, T b) {
return a.doubleValue() - b.doubleValue();
}
},
MULTIPLY('*') {
@Override
public <T extends Number> double calculate(T a, T b) {
return a.doubleValue() * b.doubleValue();
}
},
DIVIDE('/') {
@Override
public <T extends Number> double calculate(T a, T b) {
if (b.doubleValue() == 0)
throw new ArithmeticException("0으로 나눌 수 없습니다!");
return a.doubleValue() / b.doubleValue();
}
};
Enum 타입을 활용하여 연산자 타입에 대한 정보를 관리하고 제너릭을 적용하였다.
'TIL' 카테고리의 다른 글
[키오스크 만들기] 키오스크 만들기 1일차 (0) | 2025.01.13 |
---|---|
오늘의 알고리즘 (0) | 2025.01.10 |
JAVA 프로그래밍 기초 (0) | 2025.01.07 |
[계산기 만들기] 계산기를 만들기 2일차 (0) | 2025.01.06 |
[계산기 만들기] 계산기 만들기 1일 차, 그리고 생겼던 문제 (1) | 2025.01.03 |