DAY_005[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 9월 30일
0

국비과정

목록 보기
5/99

🌞 Day 005 : 조건문, 반복문 연습하기

  • 오늘은 거의 연습 문제를 풀고 답을 확인하고 다시 답을 고치는 수업을 계속 반복하는 날이었다.

 🎡 1 교시 

  • 수업이 시작되기 전에 어제 연습문제 코드를 다시 실행해보니 뭐가 헷갈렸는지 알았다.
    total 변수를 if 밖에 꺼내버리면 r에 값을 넣어달라고 오류가 나는데 (변수만 지정하고 값을 대입하지 않아서) 이를 해결하기 위새
    임의의 값을 지정하면 일단 문법상의 오류는 없어짐
  • 그러나 직급 따라 r의 값이 바뀌면 total을 다시 계산해야 한다는 것을 잊어버림
    ⇒ 활동비가 모두 같아지는 대참사가 벌어짐
    (나는 임의의 값으로 0을 넣어놔서 활동비가 0이 되어버렸다.)
  • 그렇다면 다시 반복해야 하나? NO NO 아니었음
    강사님의 설명을 듣고 깨달음을 얻었다. 해결법이 뭐였냐 하면...
    ⇒ 꺼내는 위치가 잘못 되었다.
  • if문의 위가 아니라 아래로 뺐어야 했는데
  • 어제의 내 코드를 보면 r과 pay를 연산할 때 형변환을 했었는데 굳이 할 필요가 없었다. 어차피 변수 r, total, r과 pay의 결과값 모두 double이므로 산술연산을 할 때 굳이 형변환을 할 필요가 없었다.
    (수업이 끝날 때 쯤이라 집중력이 떨어졌나보다)
  • 계산을 활동비 계산에서 활동비는 금액인데 금액에 .0이 붙는게 거슬렸다.
    근데 첨에 total에 0.0을 넣어놔서 total이 정수값이어도 .0이 붙어 출력된다.
    그래서 나는 print할 때 (int)total로 출력해서 .0을 떼버렸다.
    강사님의 설명에서도 int로 형변환 후 깔끔하게 출력하는 답을 보여 주었다.

 🔖 연습 문제 : 기본급에 따라 보너스와 총지급액 계산하기 

  • 아래가 문제 (주어진 코드)

  • 나의 답


 🎡 2 교시 

 🔖 연습 문제 : 3 과목의 점수를 입력 받고 합격, 불합격(사유까지) 출력하기 

  • 국어 영어 수학 점수를 입력 받아서 총점 평균을 계산하고
    평균 60점 이상이면서 모든 과목 40이상이면 합격,
    그렇지 않다면 불합격을 출력하기
  • 불합격 이라면 해당되는 불합격사유 (평균미달 / 국어과락 / 영어과락 / 수학과락) 중에 해당되는 사유 모두 출력하기
  • 아래가 나의 답

  • 이 문제의 포인트는 불합격의 사유를 출력하기 위해서 else-if로 모~든 경우의 수를 다 하려고 하면 망한다는 것!!
    간단하게 생각하는 것이 포.인.트!!
  • 합격 / 불합격? ⇒ 합격 (끝)
  • 합격 / 불합격? ⇒ 불합격 (아래로 이어서)
    • 그렇다면 사유가 뭔데? ⇒ 사유 출력
    • 사유 출력에서 사유 하나 당 else 없는 if문 한 줄 처리 하면 됨
      왜? 그 사유에 해당 안되면 무시하고 pass하면 되고,
      해당되면 해당 되는 것만 ‘모두’ 실행하면 되니까

 🔖 연습 문제 : 가위바위보 게임 만들기 

  • 아직 랜덤을 못 배워서 컴퓨터의 결과는 정해 놓은 상태에서 사용자의 입력에 따라 다른 결과를 출력하도록 하기
  • 컴퓨터의 결과는 정해져 있지만 컴퓨터가 어떤 수를 가지고 있던 지 제대로 실행할 수 있는 코드를 만들 것!
  • 아래가 주어진 코드
  • 나의 답
  • 무승부 후에 이겼습니다 / 졌습니다 가 바뀌지 않도록 조심할 것!!
    (실행해보고 알아챈 나…)

 🎡 3 교시 

  • 강사님ㅇ 2교시에 한 가위/바위/보 게임 만들기 해설을 하면서 랜덤 수를 만드는 메소드를 알려주었다.

 📍 int comNum = (int)(Math.random()*3); 

  • 위의 메소드를 이용해서 좀 더 게임같은 코드로 만들어 봄

 🔖 연습 문제 : 올해의 요일 계산하기 

  • 2022년 1월 1일은 토요일
    2022년에 한해서 월과 일을 입력 받은 후 해당 날짜의 요일을 출력하기
  • 예시 :
    9월30일 입력했다면
    1~8월 날짜 수를 합산 -> 입력한 월의 전달까지 날짜 수 계산
    그리고 합산한 결과에 30(입력한 일)을 더합니다.
    모두 합산한 결과를 7로 나눈 나머지를 구함
    그리고 토요일부터 상대적이 위치로 요일을 출력
  • 이 문제는 복잡하고 길어서 같이 풀어봄
  • 처음부터 혼자서 차근차근 풀어보려고 했으나 강사님이 이 문제는 같이 푼다고 하면서 코드작성과 설명이 시작… 내가 쓰던 코드 지우고 따라가려니 이해보다는 정신없이 따라 쓰기 바빴다.

  • days 계산식을 좀 더 짧게 쓸 수 있을 것 같아서 쉬는 시간에도 혼자 이리 저리 해보았으나 찾지 못했다.
    다행히도 그 다음 수업사간에 배운 switch문을 활용해 좀 더 간결하게 줄이는 방법을 배웠다.

  •  삼항 연산자 - (조건)? T일 때 값 : F일 때 값 
    간단한 if-else를 대신할 수 있는 간단한 명령

  • 점수가 70점 이상이면 합격, 아니면 불합격을 출력

  • 맨 아래의 한 줄과 바로 위 2줄(if문)은 같은 내용이다.


 🎡 4 교시 

 📍 Switch 

  • 경우의 수가 나누는 기준이 되고 관계연산식이 비교적 단순 비교일 때 사용한다.

  • >, <, >=, <=아니고 주로 ==일 때 사용

  • switch는 if와 비슷한 구조이지만, 변수값의 단순 참조에 의해 경우의 수가 분리된다.

  • Switch문 break;가 없으면 true가 되는 case에서 쭉~ 끝까지 실행되어 버린다.
    Switch문을 사용할 때 주의 해야 할 부분이지만 이 특성을을 이용해서 요일 계산 코드를 짧고 간결하게 바꿀 수 있다.

  • tdays는 앞에서 했던 days계산을 간단하게 해보았다.
    (변수명을 바꾸다가 잘못 바꿔버렸다. d를 대문자로 썼어야 했는데)


 🎡 5 교시 

 📍 반복문 : for 

  • for명령 : 반복 실행 명령
     for( ; ; ) { 반복 실행 할 코드 } 
    괄호 ( ) 안에는 반복의 횟수를 조절할 수 있는 문구를 ‘;’로 구분
    그리고 그 조절한 횟수만큼 { }안의 내용을 반복 실행

  • for 선언
     for ( 변수의 최초값; 반복 조건식; 변수의 증감량 ) { 반복 실행할 코드 } 

  • for ( )의 설명
    • 1항 : 반복을 제어할 변수의 최초값을 대입
    • 2항 : 반복을 계속할 조건이 되는 관계연산식
             관계연산식의 결과가 true이면 계속 반복하고,
             false 이면 반복을 멈춤
    • 3항 : 1항에서 최초값이 대입된 변수의 증감량을 지정
             (반복 1회마다 조정될)
    • 1증가 i++   1감소 i--   2증가 i=i+2(i+=2)   2감소 i=i-2(i-=2)

  • 위에서 변수 i와 j의 차이점은 변수의 수명이 다르다는 것
  • 지역변수 ⇒ 변수가 속한 { }안에서만 사용할 수 있다.
  • 위에서 i 는 계속 사용 가능한 변수이고,
    j는 해당 for문 안에서만 쓸 수 있다.
  • for문에 속한 반복될 대상 명령이 하나라면 { } 생략이 가능하다
  • 반복 제어 변수의 위치에 대한 부연 설명
    • 변수의 수명 : 자신을 생성한 영역 { }이 끝나면 변수도 소멸된다.
    • 반복 실행문 안쪽에 생성한 변수는 반복 실행 후 제어변수를 이후에 더이상 사용하지 않을 때 만든다.
    • 반복 실행 후 반복 제어 변수의 값이 필요하다면 for문 바깥 쪽에 변수를 선언
    • 반드시 반복 실행문 위해 별도로 선언 후 사용해야 한다.
      반복 제어 변수의 값은 임의로 변경하지만 않는다면 반복 실행 명령 중간에 사용이 가능하다.

 🔖 연습 문제 : for문을 이용해서 짝수/홀수만 출력하기 


 🎡 6 교시 

 🔖 연습 문제 : 구구단 출력하기 

  • 구구단의 단을 입력 받아서 구구단을 출력하기

  • 2를 입력받으면 2X1=1부터 2X9=18 출력되도록

  • 주어진 코드

  • 나의 답

  • 출력 결과 (분홍색 글자는 사용자가 입력한 숫자)

    출력할 단을 입력하세요 (2~9 중에 하나를 선택) : 8
    [ 8단 ]
    8 X 1 = 8
    8 X 2 = 16
    8 X 3 = 24
    8 X 4 = 32
    8 X 5 = 40
    8 X 6 = 48
    8 X 7 = 56
    8 X 8 = 64
    8 X 9 = 72

  • 굳이 sum이라는 변수를 만들 필요가 없었다 괜히 코드만 길어짐


 🎡 7 교시 

 🔖 연습 문제 : 입력 받은 두 정수 사이의 숫자 모두 출력하기 

  • 입력 받은 숫자 중 작은 숫자부터 큰 숫자까지 모든 정수를 출력하세요
    예) 8과 3 입력 -> 3,4,5,6,7,8 까지 출력
  • 주어진 코드
  • 내가 쓴 답
  • a와 b가 3가지 조건으로 입력될 수 있다고 생각했다.
    (a가 더 클 때, b가 더 클 때, 같을 때)
  • 앞의 숫자가 더 클 경우 for문의 조건이 뒤집혀야 한다.
    a,b 바꿔 쓰기 귀찮아서 1 증가를 1 감소로 바꿨더니 내림차순으로
    출력 되어 버렸다.
    항상 실행해서 출력을 확인 하면서 코드를 써야겠다.

 🔖 연습 문제 : 팩터리얼 만들기 

  • 입력 받은 숫자의 팩터리얼 계산 후 출력

  • 예시
    6을 입력했다면 (아래 두 줄처럼 출력이 되도록 만들기)
    6! = 720
    6! = 1x2x3x4x5x6 = 720

  • 주어진 코드

  • 내가 쓴 답

  • 출력 결과 (분홍글씨는 입력받은 데이터)

    팩터리얼을 입력하세요 : 8
    8! = 40320
    8! = 1 X 2 X 3 X 4 X 5 X 6 X 7 X 8 = 40320

  • 처음에 1 X 2 X 3 X 4 X 5 X 6 X 7 X 8 X 이렇게 출력이 되어서
    1을 앞으로 빼고 2부터 for문을 실행시켰다.
    X의 위치도 i 앞으로 옮겨서 수정 했더니 예쁘게 출력

  • 강사님이 내 코드를 보고 한 조언 뒤에 숫자를 없애도 된다.
    1 ~7까지 for문을 하고 ⇒ i<k가 되겠고,
    뒤에 8을 붙여도 될 듯 ⇒ .printf("%d = %d",k, fact);

  • 수정한 버전이 좀 더 깔끔해 보인다.
    굳이 내가 1을 입력하지 않는다는 것이 장점인 듯
    역시 혼자 풀어보는 것도 좋지만 다른 사람들의 의견도 듣고
    코드를 작성하는 것도 중요한 것 같다.

 🎡 8 교시 

  • 7교시에 했던 내용을 이어서 역순으로도 출력해보기
  • 반복문에서 X의 위치에 유의해서 수정해야한다.
  • 처음에 조건식을 잘 못 건드려서 무한 반복되게 되어서 이클립스를 강제 종료하고 다시 켰다.
  • 반복문에서는 무한 반복이 항상 조심할 것...
    (vscode에서는 적당히 돌다가 멈췄는데 이클립스는 멈추지 않아 ㅠ_ㅠ)

 🔖 연습 문제 : 연, 월, 일을 입력받아서 요일 계산하기 

  • 7교시에 했던 문제를 같이 풀어 본 후에 문제를 받았는데,
    어제, 오늘 배웠던 모든 내용을 모두 사용해서 풀어야하는 긴 문제였다.
  • 주어진 코드를 이클립스에 따라서 받아 적는데만도 오래걸렸고, 문제를 어떻게 어디서부터 풀어야 할 지 생각하다가 수업이 끝나버렸다.
  • 강사님도 주말에 풀 숙제라고 했고, 화요일에 같이 답을 보고 해설해주기로 하면서 오늘의 수업이 마무리되었다.



 🎠 마무리 하면서... 

  • 새로 배우는 내용들도 많았지만 어제, 오늘 배운 내용을 이용해서 코드를 직접 만드는 시간이 대부분 이었다.
  • 혼자 만들고 답과 비교해보니 정상실행되더라도 불필요하게 길게 쓴 부분들이 많았다.
  • 마지막 문제는 풀 시간이 부족했고, 점심시간이 있었지만 8시간 동안 거의 쉬지않고 집중했더니 너무 힘들고 허기져서 집에와서 복습 후에 주말에 차근차근 풀어봐야겠다.
  • 다행히 월요일이 개천절 휴일이라 3일 동안의 시간을 활용할 수 있어서 다행인 것같다.
  • 화요일에 내부평가 시험도 준비해야하고, 복습도 해야하고, 가능하면 1주 회고도 따로 기록하고 싶은데 시간이 될 지 모르겠다.
  • 약 5개월, 수업 일수로는 약 100일(20주) 정도의 짧다면 짧고 길다면 긴 기간의 과정이라서 처음의 목표는 매일 1 포스팅과 주 회고 포스팅을 쓰려고 했다.
  • 총 100+α개의 블로그 글을 쓰는게 목표였는데 아직 5일 차인데 힘들다..
    그래도 할 수 있는데까지는 해봐야겠다.
profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글