개별 프로젝트로 사칙연산 + $a$ 가 되는 계산기 개발
LV.1
최소 사칙연산이 가능할것
- $+$ , $-$ , $*$ , $/$ + $a$양의 정수(0 포함)을 입력 받기Scanner
활용양의 정수는 각각 하나씩 전달 받을것
연산 기호 입력받기Scanner
활용
입력받은 정수 2개와 연산를 활용해 연산 후 결과값 출력if
orswitch
제어문 사용연산 오류가 발생할 경우 해당 오류에 대해 출력
ex) 나눗셈 연산에서 분모에 0이 입력될 수 없습니다.
반복문을 사용하되, 반복 종료를 알려주는 'exit'문자열을 입력하기 전까지 무한으로 계산 진행for
orwhile
LV.2
연산 수행 후, 결과값 반환 메서드 구현 & 연산 결과를 저장하는 컬렉션 타입 필드를 가진Calculator
클래스 생성사칙연산을 수행한 후. 결과값을 반환하는 메서드 구현연산 결과를 저장하는 컬렉션 타입 필드를 가진Calculator
클래스 생성양의 정수 2개와 연산 기호를 매개변수로 받아 사칙연산기능을 수행한 후
결과 값을 반환하는 메서드와 연산 결과를 저장하는 컬렉션 타입 필드를 가진Calculator
클래스 생성
LV.1에서 구현한 App 클래스의 main 메서드에Calculator
클래스가 활용될 수 있도록 수정연산 수행 역할은Calculator
클래스가 담당연산 결과는Calculator
클래스의 연산 결과를 저장하는 필드에 저장
소스 코드 수정 후에도 수정 전의 기능들이 반드시 똑같이 동작할것
App클래스의 main메서드에서Calculator
클래스의 연산 결과를 저아하고 있는 컬렉션 필드에 직접 접근하지 못하도록 수정(캡슐화)간접 접근을 통해 필드에 접근하여 가져올 수 있도록 구현(Getter)간접 접근을 통해 필드에 접근하여 수정할 수 있도록 구현(Setter)위 요구사항을 모두 구현 했다면 App클래스의 main메서드에서 위에서 구현한 메서드를 활용
Calculator
클래스에 저장된 연산 결과들 중 가장 먼저 저장된 데이터를 삭제하는 기능을 가진 메서드를 구현한 후 App 클래스의 main메서드에 삭제 메서드가 활용될 수 있도록 수정
Main.java
import java.util.Objects;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int a, b, result;
String input;
char c;
Calculator calculator = new Calculator();
Scanner sc = new Scanner(System.in);
for (int i = 1; ; i++) {
System.out.printf("\n========계산 준비 완료 / 사용량 : %d회==========\n\n", i);
System.out.println("첫번째 숫자를 입력하세요.");
System.out.print(": ");
while (!sc.hasNextInt()){
System.out.println("잘못된 값을 입력하였습니다.");
System.out.print(": ");
sc.next();
}
a = sc.nextInt();
System.out.println("두번째 숫자를 입력하세요.");
System.out.print(": ");
while (!sc.hasNextInt()){
System.out.println("잘못된 값을 입력하였습니다.");
System.out.print(": ");
sc.next();
}
b = sc.nextInt();
System.out.println("사칙연산 기호를 입렵하세요(+, -, *, /)");
System.out.print(": ");
while(true){
input = sc.next();
c = input.charAt(0);
if(c == '+' || c == '-' || c == '*' || c == '/'){
break;
} else{
System.out.println("잘못된 값을 입력하였습니다. 입력값: " + c );
System.out.print(": ");
}
}
//연산 처리는 Calculator class에서만 진행
result = calculator.calculate(a, b, c);
System.out.println("\n"+ a + c + b + "=" + result);
calculator.removeresult(); // 오래된 데이터 삭제
System.out.println("최근 계산값");
// getter를 사용해 데이터 받기
for (String history : calculator.getHistory()) {
System.out.println(history);
}
System.out.print("종료 하시려면 'exit'를 입력해주세요: ");
String out = sc.next();
if (Objects.equals(out, "exit")){
break;
}
}
}
}
Calculator.java
import java.util.ArrayList;
import java.util.List;
public class Calculator {
private static List<String> history; //정보 은닉
private static final int maxSize = 10;
// 생성자
public Calculator() {
this.history = new ArrayList<>();
}
//기능
public int calculate(int a, int b, char c) {
int result = 0;
String output;
switch (c) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
case '/':
if (b == 0) {
System.out.println("분모에는 0이 들어갈 수 없습니다." + "\n");
break;
}
result = a / b;
break;
}
output = a + " " + c + " " + b + " = " + result;
setHistory(output); //setHistory에서 저장
return result;
}
// 데이터 저장
public void setHistory(String savedata){
history.add(savedata);
}
// 원본 보호를 위해 복사본 반환
public List<String> getHistory() {
return new ArrayList<>(history);
}
//오래된 데이터 삭제 기능 구현
//maxSize를 넘는 갯수가 저장된다면 첫번째 데이터부터 삭제
public void removeresult(){
if(history.size() > maxSize) {
history.remove(0);
}
}
}
최종 결과
'Project' 카테고리의 다른 글
[Project]Calculator_5 (0) | 2025.05.13 |
---|---|
[Project]Calculator_4 (0) | 2025.05.13 |
[Project]Calculator_2 (0) | 2025.05.13 |
[Project]Calculator_1 (0) | 2025.05.13 |
[Mini Team Project] KPT (0) | 2025.05.13 |