🔌 SPARTA/Assignments

[Java 문법] 계산기 과제

eunjiom 2026. 1. 12. 20:54

1️⃣ step 1 : 클래스 없이 연산수행 가능한 계산기 만들기

 

1. 정수형 입력받기

  • 스캐너를 통해 양의 정수를 선언한 정수형 변수에 저장(num, num2)한다.
public class Main {
    static void main() {

        Scanner sc = new Scanner(System.in);
        
            System.out.print("첫번째 숫자를 입력하세요: ");
            int num = Integer.parseInt(sc.nextLine());
            System.out.println("a: " + num);

            System.out.print("두번째 숫자를 입력하세요: ");
            int num2 = Integer.parseInt(sc.nextLine());
            System.out.println("b: " + num2);

 

2. 사칙연산 입력받기

  • 사칙연산을 입력하면 charbox을 통해 계산된 후 출력한다.
  • charAt(0) 명령어를 통해 가장 먼저 입력된 사칙연산으로 계산한다.
public class Main {
    static void main() {

        Scanner sc = new Scanner(System.in);
        
            System.out.print("사칙연산을 입력하세요(+, -, *, /): ");
            char charbox = sc.nextLine().charAt(0)

 

3. 결과값 출력하기(계산하기)

  • if, switch 명령어 사용
  • 연산오류 발생시 오류 내용 출력 (예외사유)
  • sum, sub 등 계산식 연산 후 계산하기
더보기
            int sum = num + num2;
            int sub = num - num2;
            int mul = num * num2;

            switch (charbox) {
                case '+':
                    System.out.println("a+b= " + sum);
                    break;

                case '-':
                    System.out.println("a-b= " + sub);
                    break;

                case '*':
                    System.out.println("a*b= " + mul);
                    break;

                case '/':
                    if (num2 == 0) {
                        System.out.println("b에 0을 입력할 수 없습니다. 다시 입력해주세요.");
                    } else {
                        int div = num / num2;
                        System.out.println("a/b= " + div);
                    }
                    break;

                default:
                    System.out.println("잘못 입력하였습니다. 다시 입력해주세요.");
                    break;
  • int result = 0; 을 이용하여 계산하기
더보기
int result = 0;

switch (charbox) {
    case '+':
        result = num + num2;
        break;

    case '-':
        result = num - num2;
        break;

    case '*':
        result = num * num2;
        break;

    case '/':
        if (num2 == 0) {
            System.out.println("b에 0을 입력할 수 없습니다.");
        } else {
            result = num / num2;
        }
        break;

    default:
        System.out.println("잘못된 연산자입니다.");
}

3-1 🚨 트러블 슈팅

  • 나눗셈 오류
더보기


해결 : 나눗셈 연산을 else 명령어 내에 작성

  • 의도적 오류: break; 가 없을 때 발생하는 오류
더보기

 

사칙연산 입력시 연산해둔 계산식의 결과값이 다 나옴

 

4. 반복문 사용 / exit 입력시 종료

  • 반복문 사용 : while
  • 조건문 사용 : if
  • i = 1 / i 가 2보다 적으면 반복 / exit 입력시 i가 2로 변경되며 종료
        int i = 1;
        while (i < 2) {
        .
        .
        .
 	}
    
            {
            System.out.print("더 진행하시겠습니까? (exit 입력 시 종료): ");
            String exit =  sc.nextLine();

            if (exit.equals("exit"))
                 i = 2;

            }

 

4-1 🚨 트러블 슈팅

더보기

 

해결: String형을 통해 값 인식 / if 문을 사용하여 i 값을 2로 만들어 반복종료

            System.out.print("더 진행하시겠습니까? (exit 입력 시 종료): ");
            String exit =  sc.nextLine();

            if (exit.equals("exit"))
                 i = 2;

5. Step1 플로우차트

 

2️⃣ step2 : 클래스 적용하여 사칙연산 계산기 만들기

 

1. 클래스 만들기

  • 연산 결과 저장하는 클래스 만들기( Caculator / ArrayList<Integer> )
package step2;

import java.util.ArrayList;

public class Calculator {

    ArrayList<Integer> names = new ArrayList<>();

    public int calculator(int a, int b, char op) {
  • 사칙연산 수행 후 결과값 반환하기
    public int calculator(int a, int b, char op) { 
    // 매개변수에 사칙연산 같이 입력
    
        int result = 0;

        switch (op) {
            case '+':
                result = a + b;
                break;

            case '-':
                result = a - b;
                break;

            case '*':
                result = a * b;
                break;

            case '/':
                if (b == 0) {
                    System.out.println("b에 0을 입력할 수 없습니다");
                    return  0;
                }
                result = a / b;
                break;

            default:
                System.out.println("잘못된 연산자 입니다.");
                return 0;

        }

        return result;

 

2. main 메서드에 클래스 활용

  • 연산값을 입력할 수 있는 필드 만들기 ( + 반복문 종료 )
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Calculator calculator = new Calculator();

        Scanner sc = new Scanner(System.in);

        int i = 1;
        while (i < 2) {
            System.out.print("첫번째 숫자를 입력하세요: ");
            int a = sc.nextInt();

            System.out.print("두번째 숫자를 입력하세요: ");
            int b = sc.nextInt();

            System.out.print("사칙연산을 입력하세요: ");
            char op = sc.next().charAt(0);

            // 결과 받기
            int result = calculator.calculator(a, b, op);
            System.out.println("결과 = " + +result);

            // 종료안내
            System.out.print("더 진행하시겠습니까? (exit 입력 시 종료): ");
            String exit = sc.next();

            if (exit.equals("exit"))
                i = 2;

        }

 

2-1 🚨 트러블 슈팅

  • 종료값 입력이 넘어가는 상황
더보기


해결: 정수 입력 받는 부분을 nextInt 로 변경 / 종료문구 next로 변경

nextInt, nextLine 통합해주기

            int a = sc.nextInt();
            int b = sc.nextInt();
            String exit = sc.next();

 

 

3. 캡슐화 / 간접접근

 

1) 결과 기록 / 클래스 캡슐화 후 getter 메서드 구현하기

  • calculator 클래스 내에 private 명령어 사용하여 결과 값 캡슐화
  • 클래스 내에서 getter 메서드 구현하여 저장된 결과값 반환
 private ArrayList<Integer> names = new ArrayList<>()
 
 .
 .
 .
 
       names.add(result); // 결과 기록
        return result;
    }

    public ArrayList<Integer> getResult() {
        return names;
    }
  • main 내에 getter 메서드 구현하여 저장된 결과값 조회
        // getter
        ArrayList<Integer> newResult = calculator.getResult();
        System.out.println(" # 저장된 결과 조회: "+ newResult);

 

1-1) 🚨 트러블 슈팅

  • main 클래스 반복문 내에 getter 메서드 구현했으나 실행안됨
더보기
            // getter
            ArrayList<Integer> newResult = calculator.getResult();
            System.out.print("저장된 결과 조회: "+ calculator.getResult());

            // 종료안내
            System.out.print("더 진행하시겠습니까? (exit 입력 시 종료): ");
            String exit = sc.next();

            if (exit.equals("exit"))
                i = 2;

        }

 

해결 : step2 Main 으로 재실행

2) 간접 접근을 통해 필드에 접근하여 수정할 수 있도록 구현 (setter)

  • 새로운 결과 상자를 만들어 수정 가능
    public class Calculator
    
    public void setResult(ArrayList<Integer> newResult) {
        this.names = newResult;
    }

 

4. 저장된 데이터 삭제하는 메서드 구현하기(remove)

  • remove 메서드를 통해 가장 먼저 저장된 결과값 삭제하기
    public void removeResult() {
        names.remove(0);
    }
}

 

5. Step2 플로우차트

 


 

과제에 대해 아쉬운 점

: exit 입력 후 결과 값을 조회하고 삭제할 수 있어서 삭제를 하고 다시 실행했을 때 이전에 저장된 결과 값을 조회할 수 없어서 아쉽다. 이후에 구현할 땐 삭제된 후의 저장된 결과 값 조회도 할 수 있게 설계하고 싶다.