Today I Learned

2024 스파르타 내일배움캠프 Sping 트랙 참여 // day8

shinelee26 2024. 10. 11. 22:02

오늘 진행한 학습 요약

1. [CH 2 프로그래밍 기초 개인 과제]  Java로 계산기 만들기

  • 클래스를 활용하지 않는 계산기
  • 주요 코드 작성 내용
  • 트러블 슈팅

학습 정리

  • 클래스를 활용하지 않는 계산기
    • 클래스를 활용하지 않는 계산기로 Java의 기본 문법으로 작성하였다.
      1. Scanner로 계산할 값과 사칙연산을 받아올 수 있도록 작성했다.
      2. System.out.prinit로 사용자에게 때에 맞는 문장이 출력되도록 설정하였다.
      3. if문으로 양의 정수(firstNum0 >= 0 && secondNum0 >= 0)를 만족하면 계산하고
        아니면 계산되지 않도록 하였다.
      4. if문으로 두번째 if문으로 사칙연산을 계산하도록 하였다.
      5. 반복문으로 계산을 계속 시행할 수있도록 while문을 사용한 계산기를 하단에 추가하였다. Test를 위해 case로 반복문인 것과 반복문이 아닌것을 선택할 수 있도록 하였다.
      6. while문을 사용한 계산이 끝나면 Sout으로 계산을 더할지 물어보고 exit가 입력되는 경우 break로 종료
        이외의 단어는 계산이 계속되게 작성하였다.
    • Git-hub에 day1로 브랜치를 생성하여 추가 내용을 작성하였다.

 

  • 주요 코드 작성내용
package NoClassCalculrator;

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);
        System.out.println("==========noClass 사칙연산 계산기==========");

        System.out.print("원하는 조건문을 선택하세요(if, while) : ");
        String option = scanner.nextLine();

        switch (option) {
            // 1. IF문으로 조건을 만족할 경우 계산하도록 작성
            case "if":
                // 첫번째 계산할 숫자 입력
                System.out.print("첫번째 숫자를 입력하세요 : ");
                int firstNum0 = scanner.nextInt();
                // 두번째 계산할 숫자 입력
                System.out.print("두번째 숫자를 입력하세요 : ");
                int secondNum0 = scanner.nextInt();
                // 계산에 사용할 사칙연산 기호 입력
                System.out.print("원하는 사칙연산 기호를 입력하세요(+, -, *, /) : ");
                char operator0 = scanner.next().charAt(0);

                if (firstNum0 >= 0 && secondNum0 >= 0) {
                    if (operator0 == '+') {
                        System.out.println("결과 : " + (firstNum0 + secondNum0));
                    } else if (operator0 == '-') {
                        System.out.println("결과 : " + (firstNum0 - secondNum0));
                    } else if (operator0 == '*') {
                        System.out.println("결과 : " + (firstNum0 * secondNum0));
                    } else if (operator0 == '/') {
                        System.out.println("결과 : " + (firstNum0 / secondNum0));
                    } else {
                        System.out.println("사칙연산 값을 잘못 입력하셨습니다.");
                    }
                } else { // 양의 정수를 입력하지 않을 경우 알림
                    if (firstNum0 < 0 && secondNum0 < 0) {
                        System.out.println("양의 정수를 입력하세요.");
                    } else if (firstNum0 < 0) {
                        System.out.println("첫번째 자리에 양의 정수를 입력하세요.");
                    } else {
                        System.out.println("두번째 자리에 양의 정수를 입력하세요.");
                    }
                }
                break;


            // 2. while문으로 특정 조건을 만족하기 전까지 연산을 반복하도록 작성
            case "while":
                while (true) {
                    System.out.print("첫번째 숫자를 입력하세요 : ");
                    int firstNum1 = scanner.nextInt();
                    // 두번째 계산할 숫자 입력
                    System.out.print("두번째 숫자를 입력하세요 : ");
                    int secondNum1 = scanner.nextInt();
                    // 계산에 사용할 사칙연산 기호 입력
                    System.out.print("원하는 사칙연산 기호를 입력하세요(+, -, *, /) : ");
                    char operator1 = scanner.next().charAt(0);
                    scanner.nextLine();

                    if (firstNum1 >= 0 && secondNum1 >= 0) {
                        if (operator1 == '+') {
                            System.out.println("결과 : " + (firstNum1 + secondNum1));
                        } else if (operator1 == '-') {
                            System.out.println("결과 : " + (firstNum1 - secondNum1));
                        } else if (operator1 == '*') {
                            System.out.println("결과 : " + (firstNum1 * secondNum1));
                        } else if (operator1 == '/') {
                            System.out.println("결과 : " + (firstNum1 / secondNum1));
                        } else {
                            System.out.println("사칙연산 값을 잘못 입력하셨습니다.");
                        }
                    } else { // 양의 정수를 입력하지 않을 경우 알림
                        if (firstNum1 < 0 && secondNum1 < 0) {
                            System.out.println("양의 정수를 입력하세요.");
                        } else if (firstNum1 < 0) {
                            System.out.println("첫번째 자리에 양의 정수를 입력하세요.");
                        } else {
                            System.out.println("두번째 자리에 양의 정수를 입력하세요.");
                        }
                    }
                    System.out.println("더 계산을 원하시면 아무키나 눌러주세요 (exit 입력 시 종료)");
                    String answer = scanner.nextLine();

                    if (answer.equals("exit")) {
                        break;
                    } else {
                        System.out.println("=============================");
                    }
                }
        }
    }
}

 


트러블 슈팅

  • 문제
    • Test를 위해 Case를 사용하면서 상단에 input과 output의 내용을 적어논것이 while로 반복문을 사용할때 사용되지 못하였다.

  • 해결 방안
    • 계산 값 입출력 구현부분을 각 case 안에서 구현이 되도록 작성하였다.

  • 의문점
    • Case문을 사용하니 동일한 코드의 반복사용이 많았다.
    • 동일한 코드를 재작성하지 않고 변수로 사용할 수는 없는지 고민하게 되었다.
    • Class를 사용하면 코드의 반복사용을 줄일 수 있을 것 같다.