[Spring_4기 본캠프] 3주차 - 계산기 lv1 구현하기 | Day 21
1. 계산기 구현하기 과제
<Lv.1 클래스 없이 기본적인 연산을 수행할 수 있는 계산기 만들기>
- 필수 기능 -
1) 양의 정수(0을 포함)를 입력받기
2) 사칙연산 기호를 입력받기
3) 입력받은 정수들의 연산 결과를 출력
package lv1;
import java.util.Scanner;
public class CalculatorApp {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (true) {
System.out.print("숫자를 입력하세요 : ");
int num1 = sc.nextInt();
System.out.print("연산자를 입력하세요 (exit 입력 시 종료됩니다) : ");
String operator = sc.next();
if (operator.equals("exit")) {
System.out.println("프로그램을 종료합니다. ");
break;
}
System.out.print("숫자를 입력하세요 : ");
int num2 = sc.nextInt();
int result;
switch (operator) {
case "-" -> result = num1 - num2;
case "+" -> result = num1 + num2;
case "*" -> result = num1 * num2;
case "/" -> {
if (num2 == 0) {
System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
continue;
}
result = num1 / num2;
}
default -> {
System.out.println("잘못된 연산자 입니다. 다시 입력해주세요.");
continue;
}
}
System.out.println(num1 + operator + num2 + " = " + result);
}
sc.close();
}
}
<제한사항>
- 사용자가 숫자를 입력할 때 양의 정수 (0 포함)를 받을 수 있지만 0으로 나눌 수는 없다.
- 연산 기호는 사칙연산 기호를 기준으로 한다. ( +, -, *, / )
- exit 를 입력하면 종료되어야 함
<구현계획>
- Scanner 클래스를 사용해 숫자와 연산기호를 입력받자.
- 종료 조건은 exit를 눌렀을 때만 발동하도록 하자.
- 사칙연산 기호를 입력받아 num1과 num2의 연산 결과를 출력하자.
- 사칙연산 기호는 + (덧셈), - (뺄셈), * (곱셈), / (나눗셈) 으로 제한하고 다른 연산자를 입력할 경우 잘못된 입력으로 프로그램 다시 시작
- 연산 결과가 출력되면 자동으로 프로그램을 다시 실행한다. (while문 true)
- if문을 사용해 잘못된 입력 (0으로 나눌 경우, 연산기호가 잘못될 경우)이 있으면 프로그램이 다시 시작된다.
해당 코드를 작성할 때, 영빈님 (나의 구원자.. 내가 아는 사람 중 최고 코딩 천재)이 페어 프로그래밍이라는 것을 알려주셨다.
페어 프로그래밍이란 애자일 소프트웨어 개발 방법론 중 하나로, 두 명의 프로그래머가 한 컴퓨터에서 짝을 이루어 작업하는 방법이다.
한 명은 코드를 작성하고 (driver) 한 명은 관찰하거나 지시를 내린다 (observer, navigator).
즉 영빈님이 프로그래밍의 방향을 설명하면 내가 드라이버가 되어 지시대로 코드를 작성하는 것이다.
다 알려주는 거랑 뭐가 달라? 라는 생각이 들 수도 있지만 네비게이터가 지시하는 방향을 드라이버가 알아듣고 쓸 수 있어야 페어 프로그래밍이 정상적으로 진행된다. ~라고 쓰세요 라기 보다는 ~를 구현하기 위한 메서드를 써주세요 라는 식으로 진행이 되었다.
실시간으로 코드를 작성해본 적도 없고 아직 공부도 많이 안되어있는 상태라서 그냥 캐리만 받다 끝나진 않을까 걱정했는데
생각보다 술술 써져서 놀랐다. 이건 내 능력이 아니라 아마 네비게이터인 영빈님이 지시를 잘 해주셔서 된 것 같지만..
구현계획이나 쓰고싶은 메서드들이 생각은 나지만 아직 실전에서 코드를 짜본 적이 없어서 방향을 잡지 못했었는데 이번 기회를 통해
아 코드를 이런 흐름으로 작성하는 거구나라는 것을 배우게 되었다.
<문제점>
- exit를 입력하는 것이 연산기호 입력부분에 있어서 종료하기 불편해짐
- equals() 메서드를 사용해 정확히 소문자로 exit를 입력해야 종료된다.
<해결방안, 개선점>
- 사용자의 입력을 받는 프로그램의 시작 부분에 계산을 계속하려면 cal , 종료하려면 exit를 누르세요 라는 조건을 만들어 처음부터 지시사항을 이행할 수 있게 수정한다.
- equalsIgnoreCase 메서드를 사용해 대소문자를 구분하지 않고 비교하게 한다.