Notice
Recent Posts
Recent Comments
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Spring & Java

JAVA 계산기 과제 (1차) 본문

JAVA 객체지향 이해하기

JAVA 계산기 과제 (1차)

dev.hyuck 2025. 12. 9. 20:38

사용할 기능들

Scanner, while, double pad, catch,  String input1 = calculrating.nextLine(); double 타입을 쓰기 위한 형변환

ArryList<>,  return Double.NaN; 연산자가 아닐경우 NaN를 출력 하도록 설정 등 

여러 기능들을 사용해서 계산기를 구현해 봤습니다.

 

● 기능 구현

Scanner 에서 출발하여  각 값을 입력 받도록 하는 것이 목표 입니다. 하지만, 아직 부족한 부분이 많습니다. 우선 계산기에 사용 될 뼈대(?) 정도만 구현이 되었으며 여기서 더 튼튼하게 계산기를 만들 수 있습니다. 0-9, "exit" 사용자가 입력 할 경우 값이 다르게 예외 처리도 할 수 있었습니다. 예외 처리가 현실적으로 이루어졌다면 정수형 타입을 받아 들여야 됩니다.

 

왜? 0 - 9 의 숫자만 예외 처리 하는것인데 문자를 입력 받도록 하는것은 불가능 하기 때문입니다.

 

while 문으로 반복문을 열어 결과 값이 '참' 일 경우에 값을 반환 하도록 하였습니다.

 0-9사이의 정수를 ㅁ 상자에 담고 다음 연산자를 담을 ㅁ 상자를 만들고 마지막 정수를 담을 ㅁ 상자를 만들어

각각 ㅁ [] ㅁ = 같은 구도를 만들어 num1과 operation num2 상자에 담아 내고 그 값들을 각각 출력 하도록 도출 하였습니다.

- 저는 과정중에서 operration의 메서드인 객체를 만들어 새로운 Class인 Calculrator을 만들어 두 과정을 인스턴스화 했습니다.

num1, num2 또한 따로 각각 Class를 나눠서 가독성을 키우고 편하게 관리할 수 있었지만 아직은 학습의 한계가 있어 조금 더 학습해야 될 것으로 생각 되었고 지금까지의 코드를 아래에 업로드 합니다.

 

피드백이 있다면 언제든 받아들이겠습니다. TIL을 매일매일 작성 하면서 제가 직접 기능들을 구현하고 학습 한다는것은 역시 매우 어려운 일이라는 것을 알게 됐습니다. 계산기 방식을 전반적으로 디테일하게 뼈대를 잡는것까지 한번에 JAVA 문법에 관련된 내용을 추가해볼 생각 입니다. 

 

package Calculrating;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Calculrator calculrator = new Calculrator();
        Scanner calculrating = new Scanner(System.in);

        System.out.println("========== 자바 계산기 과제 만들기 ==========");
        System.out.println(" 언제든 exit를 입력하면 프로그램이 종료 됩니다.");
        System.out.println();

        while (true) {

            double num1;
            try {
                System.out.println("0-9사이의 숫자를 입력 하세요: ");
                String input1 = calculrating.nextLine();

                if (input1.equalsIgnoreCase("exit")) {
                    System.out.println("계산기를 종료합니다.");
                    break;
                }

                num1 = Double.parseDouble(input1);

            } catch (InputMismatchException e) {
                System.out.println("숫자만 입력해주세요.");
                calculrating.nextLine();
                continue;
            }

            System.out.println("연산자를 입력 하세요");
            System.out.println("+, -, %, /");
            String operation = calculrating.nextLine();

            if (operation.equalsIgnoreCase("exit")) {
                System.out.println("계산기를 종료합니다.");
                break;
            }

            double num2;
            try {
                System.out.println("0에서 9사이의 숫자를 입력하세요");
                String input2 = calculrating.nextLine();

                if (input2.equalsIgnoreCase("exit")) {
                    System.out.println("계산기를 종료 합니다.");
                    break;
                }
                num2 = Double.parseDouble(input2);

                } catch(InputMismatchException e){
                System.out.println("숫자만 입력하세요");
                continue;
            }

            double pad = calculrator.calculate(num1, num2, operation);

            System.out.println("==============");
            System.out.println("결과:" + num1 + " " + operation + " " + num2 + " = " + pad);
            System.out.println("==============");
            System.out.println();

            while (true) {
            System.out.println("계속 계산하시겠습니까? (y/n)");
            String again = calculrating.nextLine();

            if (again.equalsIgnoreCase("exit")) {
                System.out.println("계산기를 종료합니다 감사합니다.");
                calculrating.close();
                return;
                } else if (again.equalsIgnoreCase("y")){
                    System.out.println(" 다음 계산을 시작합니다.");
                break;
                } else if (again.equalsIgnoreCase("n")) {
                    System.out.println("계산기를 종료합니다.");
                    calculrating.close();
                    return;
            } else {
                    System.out.println(" 잘못된 방식입니다 y또는 n만 입력해주세요.");
                }

                }
            }
        calculrating.close();
        }

    }

 

ackage Calculrating;

import java.util.ArrayList;
import java.util.Scanner;
import java.util.List;


public class Calculrator {

    private List<Double> calculratorbox = new ArrayList<>();
    // 연산 결과를 저장함
    // ArrayList를 사용해 정수를 사용할 예정임 ( double )
    // 배열의 길이가 고정되어 있지 않고 내가 원하는 만큼 값을 넣었다 뺏다 할 수 있도록

    public double calculate(double num1, double num2, String operation) {
        double result = 0;

        switch (operation) {
            case "+":
                result = num1 + num2;
                break;
            case "-":
                result = num1 - num2;
                break;
            case "*":
                result = num1 * num2;
                break;
            case "/":
                if (num2 == 0) {
                    System.out.println("0으로 나눌 수 없습니다.");
                    return Double.NaN;
                }
                result = num1 / num2;
                break;
            default:
                System.out.println(" 잘못된 연산자 입니다.");
                return Double.NaN;
        }

        calculratorbox.add(result);
        return result;
    }

    public List<Double> getCalculratorbox() {
        return calculratorbox;
    }
    public void setCalculratorbox(List<Double> calculratorbox) {
        this.calculratorbox = calculratorbox;

    }
}