JAVA 계산기 만들기 Lv.1

SJ.CHO·2024년 9월 5일

필수 기능

사용기술

  • JAVA
  • Git, Github

진행과정

  • 버전관리 및 코드관리를 위한 Git 레파지토리 생성 및 연결

  • 개발용 dev 브랜치 생성

  • Git History 관리를 위한 commit 컨벤션 수립

    Commit 컨벤션 : 프로젝트 참가ㄷ자들이 일관된 형식의 커밋메시지를 작성하기위한 규칙. 가독성 향상, 변경이력 추적이 가능.

  • 컨벤션 적용 사진

  • 익숙하지 않은 방법이다 보니 줄바꿈 등 습관화가 덜 됌.

  • 커밋메세지 내에서 줄을 바꾸고싶은 경우 git commit -m '메세지' 명령어중 따옴표를 닫지않고 엔터를 누를시 개행 됌.

$ git config --global commit.template C:\.gitmessage.txt
  • 글로벌설정을 통해 템플릿을 터미널에 등록 $git commit 을 통해 vim으로 템플릿을 사용가능.

참조 :
https://kdjun97.github.io/git-github/commit-convention/
https://shawn-dev.oopy.io/4cc7380c-7191-4022-8c7f-8069b403d850
https://guuumi.tistory.com/128

  • 양의 정수 입력받기 및 사칙연산 기호 입력받기

// 스캐너를 통한 숫자 1,2 입력 후 변수저장.
System.out.print("첫 번째 숫자를 입력하세요 : ");
firstNum = sc.nextInt();
System.out.print("두 번째 숫자를 입력하세요 : ");
secondNum = sc.nextInt();
// 스캐너를 통한 사칙연산 기호 삽입.
System.out.print("사칙연산 기호를 입력하세요 : ");
char operator = sc.next().charAt(0);
  • 스캐너를 통한 콘솔 입력 후 변수에 저장.
  • 연산진행하기

                switch (operator) {
                    case '+':
                        result = firstNum + secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    case '-':
                        result = firstNum - secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    case '*':
                        result = firstNum * secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    case '/':
                        result = firstNum / secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    case '%':
                        result = firstNum % secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    default:
                        System.out.println("존재하지 않는 연산자 입니다.");
                        break;
                }
  • 입력한 사칙연산 기호를 통해 연산 후 콘솔출력.
  • 무한 반복 및 Stop 분기 추가

while (flag) {
            try {
            // 사칙연산로직...
            while (onOfflag) {
                    System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)(yes 입력 시 계속)");
                    String onOff = sc.next();
                    // exit 가 입력될경우 프로그램 종료
                    if (onOff.equals("exit")) {
                        flag = !flag;
                        onOfflag = !onOfflag;
                        // yes 입력시 계산 재진행.
                    } else if (onOff.equals("yes")) {
                        System.out.println("계산을 다시 진행합니다.");
                        onOfflag = !onOfflag;
                    } else {
                        System.out.println("yes 혹은 exit 로 만 입력해주세요.");
                    }
                }
  • 콘솔을 통해 exit 문자열이 입력될시 반복문조건인 bool 타입의 onOfflag 변수 및 메인 flag 변수를 false 로 만들고 반복 종료.

  • 분모 0 나눗셈 및 정수 외 문자 입력 예외 처리

try {
// 사칙연산로직...
 } catch (ArithmeticException e) {
 				// 0 으로 나누기 연산시 예외발생 처리
                System.out.println("0으로는 나눌 수 없습니다.");
                // 숫자 실수 및 문자 입력시 예외발생 처리
            } catch (InputMismatchException e) {
                System.out.println("숫자 혹은 정수를 입력해주세요.");
                sc.nextLine();
            }
          }

트러블슈팅

링크(클릭)

완성본

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

public class Calculator {
    public static void main(String[] args) {
        // 숫자 1,2 를 입력받기 위한 스캐너 객체 생성.
        Scanner sc = new Scanner(System.in);
        // 연산 용 값 저장 변수
        int firstNum = 0;
        int secondNum = 0;
        double result = 0;
        boolean flag = true;
        boolean onOfflag;
        // 계산기 무한반복 진행.
        while (flag) {
            try {
                onOfflag = true;
                // 스캐너를 통한 숫자 1,2 입력 후 변수저장.
                System.out.print("첫 번째 숫자를 입력하세요 : ");
                firstNum = sc.nextInt();
                System.out.print("두 번째 숫자를 입력하세요 : ");
                secondNum = sc.nextInt();
                // 스캐너를 통한 사칙연산 기호 삽입.
                System.out.print("사칙연산 기호를 입력하세요 : ");
                char operator = sc.next().charAt(0);
                // 연산자의 따른 연산 진행 제어문
                switch (operator) {
                    case '+':
                        result = firstNum + secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    case '-':
                        result = firstNum - secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    case '*':
                        result = firstNum * secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    case '/':
                        result = firstNum / secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    case '%':
                        result = firstNum % secondNum;
                        System.out.println(firstNum + " " + operator + " " + secondNum + " = " + result);
                        break;
                    default:
                        System.out.println("존재하지 않는 연산자 입니다.");
                        break;
                }
                // yes 와 exit 외의 문자가 입력될 경우 다시 반복.
                while (onOfflag) {
                    System.out.println("더 계산하시겠습니까? (exit 입력 시 종료)(yes 입력 시 계속)");
                    String onOff = sc.next();
                    // exit 가 입력될경우 프로그램 종료
                    if (onOff.equals("exit")) {
                        flag = !flag;
                        onOfflag = !onOfflag;
                        // yes 입력시 계산 재진행.
                    } else if (onOff.equals("yes")) {
                        System.out.println("계산을 다시 진행합니다.");
                        onOfflag = !onOfflag;
                    } else {
                        System.out.println("yes 혹은 exit 로 만 입력해주세요.");
                    }
                }
                // 0 으로 나누기 연산시 예외발생 처리
            } catch (ArithmeticException e) {
                System.out.println("0으로는 나눌 수 없습니다.");
                // 숫자 실수 및 문자 입력시 예외발생 처리
            } catch (InputMismatchException e) {
                System.out.println("숫자 혹은 정수를 입력해주세요.");
                sc.nextLine();
            }
        }
    }
}
profile
70살까지 개발하고싶은 개발자

0개의 댓글