1. 요구사항 정의 및 설계
- 요구사항 정의
- 양의 정수 입력받기
- 사칙연산 기호 입력받기
- 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값 출력하기
- 반복문을 사용하되, 반복의 종료를 알려주는 "exit" 문자열을 입력하기전까지 무한으로 계산을 진행할 수 있도록 하
- 설계
- 클래스 다이어그램: 클래스 없이, App 클래스에서 설계
- 기능 분해: sum, subtract, multiply, divide
- 데이터 흐름 설계
- 입력단계: 2개의 정수를 입력받기
- 처리단계:
- 종료조건확인: "exit" 입력 시 계산 종료
- 연산처리: 연산자에 따른 계산수행, 나눗셈의 경우 분모가 0 이면 연산 수행 안함, 나눗셈의 경우 실수로 연산 수행
- 출력단계: 결과값 출력 및 종료 안내
2. 단계별 문제 풀이
1. 양의 정수(0 포함)를 입력받기
- Scanner를 사용하여 양의 정수 2개(0 포함)를 전달 받을 수 있습니다.
- 양의 정수는 각각 하나씩 전달 받습니다.
- 양의 정수는 적합한 타입으로 선언한 변수에 저장합니다.
// 1. 숫자 두 개 받기
System.out.println("첫 번째 숫자를 입력하세요.");
int firstInt = sc.nextInt();
System.out.println("두 번째 숫자를 입력하세요.");
int secondInt = sc.nextInt();
// 2. 기호를 받을 때는 공백을 제거해주었다.
System.out.print("사칙연산 기호를 입력하세요: ");
String symbol = sc.next();
2. 사칙연산 기호(➕,➖,✖️,➗)를 입력받기
- Scanner를 사용하여 사칙연산 기호를 전달 받을 수 있습니다.
- 사칙연산 기호를 적합한 타입으로 선언한 변수에 저장합니다.
// 2. 기호를 받을 때는 공백을 제거해주었다.
System.out.print("사칙연산 기호를 입력하세요: ");
String symbol = sc.next().trim();
3. 위에서 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력하기
- 키워드 : if switch
- 사칙연산 기호에 맞는 연산자를 사용하여 연산을 진행합니다.
- 입력받은 연산 기호를 구분하기 위해 제어문을 사용합니다. (예를 들면 if, switch)
- 연산 오류가 발생할 경우 해당 오류에 대한 내용을 정제하여 출력합니다.
- ex) “나눗셈 연산에서 분모(두번째 정수)에 0이 입력될 수 없습니다.“
switch (symbol) {
case "+" :
System.out.println(firstInt+secondInt);
break;
case "-" :
System.out.println(firstInt-secondInt);
break;
case "/" :
if(secondInt ==0) {
System.out.println("나눗셈 연산에서는 분모(두번째 정수)에 0이 입력될 수 없습니다");
break;
}
else {
// 형변환하여 나눗셈 해주기
double a = firstInt;
double b= secondInt;
System.out.println(a/b);
break;
}
case "*" :
System.out.println(firstInt*secondInt);
break;
default:
// 기호를 잘못입력 하였을 경우
System.out.println("잘못입력하였습니다.");
}
4. 반복문을 사용하되, 반복의 종료를 알려주는 “exit” 문자열을 입력하기 전까지 무한으로 계산을 진행할 수 있도록 소스 코드를 수정하기
- 키워드 : 무한으로 반복, 수정하기 (처음부터 무한 반복하는 것이 아니라, 위 스텝별로 진행하며 수정)
- 반복문을 사용합니다. (예를 들어, for, while…)
while (true) {
// 숫자와 기호 입력받기
...
if(exitBool.equals("exit")){
break;
}
else{
switch (symbol) {
...
}
}
System.out.print("더 계산하시겠습니까? (더 하고 싶을 시, 엔터 입력 | exit 입력시 종료) ");
sc.nextLine();
exitBool = sc.nextLine();
}
3. App.Java
package com.example.calculator;
import java.util.Scanner;
public class App {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String exitBool = " ";
while (true) {
// 1. 숫자 두 개 받기
System.out.println("첫 번째 숫자를 입력하세요.");
int firstInt = sc.nextInt();
System.out.println("두 번째 숫자를 입력하세요.");
int secondInt = sc.nextInt();
// 2. 기호를 받을 때는 공백을 제거해주었다.
System.out.print("사칙연산 기호를 입력하세요: ");
String symbol = sc.next().trim();
// 3. exitBool 값이 exit일 경우와 아닐 경우를 통해 분기 다르게 하기.
if(exitBool.equals("exit")){
break;
}
else{
switch (symbol) {
case "+" :
System.out.println(firstInt+secondInt);
break;
case "-" :
System.out.println(firstInt-secondInt);
break;
case "/" :
if(secondInt ==0){
System.out.println("나눗셈 연산에서는 분모(두번째 정수)에 0이 입력될 수 없습니다");
break;
}
else{
// 형변환하여 나눗셈 해주기
double a = firstInt;
double b= secondInt;
System.out.println(a/b);
break;
}
case "*" :
System.out.println(firstInt*secondInt);
break;
default:
System.out.println("잘못입력하였습니다.");
}
}
System.out.print("더 계산하시겠습니까? (더 하고 싶을 시, 엔터 입력 | exit 입력시 종료) ");
sc.nextLine();
exitBool = sc.nextLine();
}
System.out.println("종료되었습니다.");
}
}
'백엔드 부트캠프 > 문제풀이' 카테고리의 다른 글
Lv 3. 도전 계산기 만들기 (1) | 2025.03.06 |
---|---|
Lv 2. 클래스를 적용해 기본적인 연산을 수행할 수 있는 계산기 만들기 (0) | 2025.02.27 |
[Chapter02-1] 클래스와 객체 실습과제 (0) | 2025.02.25 |