'4월 23일' 일곱 번째 기록 [TIL]

가은·2024년 4월 23일
0

I Learned [본 캠프]

목록 보기
8/135
post-thumbnail

👩‍🏫 오늘의 출석

❓일곱 번째, 9 to 9을 해 본 소감❓

오늘은 오전부터 열심히 2주 차 강의와 3주 차 chap9까지 강의를 들었다. 컬렉션, 이게 왜 이렇게 머리에 안 들어오는지 한참을 복습하고 강의 듣고 코드 작성해 보고 시간을 보냈다. 12시간은 하루하루 느끼는 거지만 듣기에는 엄청 긴 시간 같고, 시간이 잘 안 갈 것 같은 느낌인데 이게 막상 12시간을 보내다 보면 저녁을 먹고 난 후에는 시간이 너무 빨리 흘러서 부족하다고 느낄 정도다. (그래서 항상 TIL 쓰는 시간이 자꾸 9시 이후가 돼버리는,,) 오늘만 해도 내가 세워둔 계획은 아주 많았는데 강의만 듣고 이해가 안 되는 부분 붙잡고 몇 번 찾아보고 정리만 살짝 했는데 12시간 중 6시간 이상이 후루룩 지나갔다.
아쉽게 마지막 task를 하지 못 했다..

📑오늘 학습한 내용

오전부터 오후 5시까지는 계속 2주 차 강의와 3주 차 강의를 들었다. 컬렉션을 사용해서 과제를 진행해야 하는데 강의를 들을 때는 이해돼서 넘어갔는데 막상 사용하려니 어떻게 사용을 해야 하는지 이게 정확하게 뭔지 헷갈려서 다시 찾아보고 복습하는데 시간이 꽤 걸렸다.

❔2주차 과제 중 이게 뭐지❔

🗝️여기서 잠깐! "strList.get(i)"

get명령어는 해당 번지의 값을 가져오는 명령어

for (int i=0; i < strList.size(); i++){
                   int num = i + 1;
                   System.out.println(num + "." + strList.get(i)); 
               }

🗝️여기서 잠깐! "Iterator"

Iterator는 컬렉션에 저장된 요소들을 순차적으로 읽어오기 위해 사용

Iterator iterator = strSet.iterator();  

❔2주차 과제 중 이게 왜지❔

🗝️여기서 잠깐! "Objects.equals VS equals"

Objects.equals와 equals의 가장 큰 차이점은 Objects.equals()null 값을 안전하게 처리하는 반면 equals()null 객체와 함께 사용되면 NullPointerException발생한다는 점이다. 이러한 이유 때문에 Objects.equals를 사용하여 작성하였다.

while(true){
                    String text = sc.nextLine();
                    if (Objects.equals(text,"끝") ) { 
                        break;
                    }
                    strList.add(text);
                }

이후 7시부터 8시까지는 개인 과제를 진행했다.

❣️개인 과제

✔️ 첫 번째 요구사항

  • Scanner를 사용하여 양의 정수 2개(0 포함)를 전달 받을 수 있습니다.
    • 양의 정수는 적합한 타입으로 선언한 변수에 저장합니다.
 Scanner sc = new Scanner(System.in);

        System.out.println("첫 번째 숫자를 입력하세요: ");
        int firstnum = sc.nextInt();
        System.out.println("두 번째 숫자를 입력하세요:  ");
        int secondnum = sc.nextInt();

        System.out.println("첫 번째 숫자: " + firstnum + "두 번째 숫자: " + secondnum); // 입력 받은 값이 변수에 잘 저장 되었는지 확인

✔️두 번째 요구사항

  • Scanner를 사용하여 사칙연산 기호를 전달 받을 수 있습니다.
    • 사칙연산 기호를 적합한 타입으로 선언한 변수에 저장합니다. (charAt(0))
sc.nextLine();  
        System.out.println("사칙연산 기호를 입력하세요: ");
        String operator = String.valueOf(sc.nextLine().charAt(0));

        System.out.println("첫 번째 숫자: " + firstnum + "두 번째 숫자: " + secondnum + "연산기호: " + operator); // 입력 받은 값이 변수에 잘 저장 되었는지 확인

🗝️여기서 잠깐! "sc.nextLine();" // 개행 문자 소비

sc.nextInt(); // 두 번째 숫자 <- 여기서 숫자를 누르고 엔터를 누르면 실제 입력값은 (숫자 + 엔터) 여기서 엔터는 \n이라는 것이 추가로 입력이 되는데 개행 문자 소비 없이 char operator = sc.nextLine().charAt(0); 이 코드가 실행되면은 sc.nextLine()에 남아있던 \n가 들어가면서 아무 문자열이 없는 상태에서 charAt(0)로 0 인덱스에 접근을 하면서 java.lang.StringIndexOutOfBoundsException: String index out of range: 0가 발생
즉, 숫자를 입력하고 엔터를 누른 것 때문에 저 오류가 발생하게 되고, 이 오류를 해결하기 위해 입력된 엔터 값을 소비하도록 sc.nextLine();가 필요함

✔️세 번째 요구사항

  • 입력받은 양의 정수 2개와 사칙연산 기호를 사용하여 연산을 진행한 후 결과값을 출력합니다.
    • 입력받은 연산 기호를 구분하기 위해 제어문을 사용합니다. (e.g.if, switch)
    • 연산 오류가 발생할 경우 해당 오류에 대한 내용을 정제하여 출력합니다.
      • e.g. "나눗셈 연산에서 분모(두번째 정수)에 0이 입력될 수 없습니다."
switch (operator) {
            case '+': // 덧셈 연산
                result = firstnum + secondnum;
                System.out.println("결과: " + result);
                break;
            case '-': // 뺄셈 연산
                result = firstnum - secondnum;
                System.out.println("결과: " + result);
                break;
            case '*': // 곱셈 연산
                result = firstnum * secondnum;
                System.out.println("결과: " + result);
                break;
            case '/': // 나눗셈 연산
                if (secondnum > 0) {
                    result = firstnum / secondnum;
                    System.out.println("결과: " + result);
                    break;
                } else {
                    System.out.println("나눗셈 연산에서 분모(두번째 정수)에 0을 입력할 수 없습니다.");
                }
            default:
            }

✔️네 번째 요구사항

  • 반복문을 사용하여 반복의 종료를 알려주는 “exit” 문자열을 입력하기 전까지 무한으로 계산을 진행할 수 있도록 소스 코드를 수정합니다.
while (true){
        System.out.println("첫 번째 숫자를 입력하세요: ");
        int firstnum = sc.nextInt(); //첫 번째 숫자
        System.out.println("두 번째 숫자를 입력하세요:  ");
        int secondnum = sc.nextInt(); // 두 번째 숫자

        sc.nextLine(); // 개행 문자 소비

        int result = 0; // 초기화

        System.out.println("사칙연산 기호를 입력하세요: ");
        char operator = sc.nextLine().charAt(0);

        switch (operator) {
            case '+': // 덧셈 연산
                result = firstnum + secondnum;
                System.out.println("결과: " + result);
                break;
            case '-': // 뺄셈 연산
                result = firstnum - secondnum;
                System.out.println("결과: " + result);
                break;
            case '*': // 곱셈 연산
                result = firstnum * secondnum;
                System.out.println("결과: " + result);
                break;
            case '/': // 나눗셈 연산
                if (secondnum > 0) {
                    result = firstnum / secondnum;
                    System.out.println("결과: " + result);
                    break;
                } else {
                    System.out.println("나눗셈 연산에서 분모(두번째 정수)에 0을 입력할 수 없습니다.");
                }
            default:
            }
            System.out.println("더 게산하시겠습니까? (exit 입력 시 종료)");
            String text = sc.nextLine();
            if (text.equals("exit"))
                break;
        }

0개의 댓글