백엔드 부트캠프/문제풀이

Lv 1. 클래스 없이 기본적인 연산을 수행할 수 있는 계산기 만들기

sintory-04 2025. 2. 26. 09:07

    1. 요구사항 정의 및 설계

    1. 요구사항 정의
      • 양의 정수 입력받기
      • 사칙연산 기호 입력받기
      • 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값 출력하기
      • 반복문을 사용하되, 반복의 종료를 알려주는 "exit" 문자열을 입력하기전까지 무한으로 계산을 진행할 수 있도록 하
    2. 설계
      • 클래스 다이어그램: 클래스 없이, 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("종료되었습니다.");
      }
    }