코딩 학원 6일차 (Java 반복문)
어제 내준 문제를 풀어보면서 수업이 시작 됬다.
이렇게 직전에 했던 조건문을 활용한 BMI 수치와 비만도 판정 프로그램을 참고 해서 왔다갔다 하면서 적어내려갔다.
마냥 복붙 한건 아니고 강사님이 말씀했던 것 처럼 왜 이게 여기 들어가는지 생각 해가며 작성했다.
강사님이 만든 것과의 차이점은
이 3개였다. 이 3개는 못할 거 예상했다며 요기 까지 혼자 다 했다면 상당한 수준이라 하셨는데 동의하기 어려웠다.
저번 수업 때 알려주셨던 << (left shft 연산자였나)가 나왔다.
흡연실 = 1 << 3 = 8
주차장 = 1 << 2 = 4
와이파이 = 1 << 1 = 2
24시간 = 1 << 0 = 1
를 int v에 숫자를 넣었을 때 값이 나오게 코드를 작성하면
이걸 보면 함수로 줄일 수 있을 것 같아서 근질근질 하지 않냐고 하셨다.
그러다 갑자기 클래스를 하나 더 만드시고 어제 했던 if - else if - else 말고도 하나의 조건문이 더 있단다.
나이 :
------------------
나이가 20살이면 어서오세요.
위 문장을 if를 활용해서 만들 수도 있지만 이런 조건문switch - case 이 두가지가 더 있다.
case는 값을 지정해서만 쓸 수 있고 ~~이상이면 이하면은 사용이 안 된다. 즉 if문에 비해 기능이 딸린다.
또한 문법도 생소하다. (영역 지정이 { } 가 아닌 : ;를 이용한다.) 그럼에도 switch - case가 왜 있을까?
이렇게 중간에 break;를 주석 처리 해도 어서오세요가 나오는데 switch - case 같은 경우 break를 만날 때 까지 흐름도를 타고 내려가기 때문에 보통의 경우 조건문은 if - else 를 사용하나 이런 기능이 필요한 특별한 경우에 쓴다고 한다.
계급 :
----------------
만들고 계급을 넣으면
이병 - 눈치, 관등성명, 훈련, 잠
일병 - 관등성명, 훈련, 잠
상병 - 훈련, 잠
병장 - 잠
이 나오게 강사 본인만 해보겠단다 우리는 머릿속에 if문이 그려만져도 괜찮단다. 그런데 if로 언제 이거 하나하나 다 쓸 거냐며 바로 이런 상황에 switch를 쓴다 하셨다.
if로 하게 되면 굉장히 길어졌을 문장이 아주 간결해졌다.
이런식으로 뭔가 권한이 필요할 때 쓰면 좋은거 라고 하셨다.
DB를 관리하는 3가지 분류가 있는데
DBA(Admin) : 전원 관리, 백업/복구, CRUD(데이터 다루기), 서비스 이용
DBP(Programmer) : (실질적인 우리 목표) CRUD(데이터 다루기), 서비스 이용
DBU(User) : 서비스 이용
이걸 역할에 DBA 등을 입력했을 때 하는 일이 나오게 만들어보라 하셨다.
(처음에 DBA를 브레이크 직전에 놨더니 잘 안 됬었는데 역할이 많은 사람이 제일 위로 올라아야 된다는걸 깨닫고 고쳐씀.)
Java 1.4 때나 다른 언어에선 case 옆에 "DBA" 참조형이라 넣을 수 없다 하셨다. 혹시나 회사에서 1.4를 쓰면 못쓴단다.
사실 Java에선 함수 같은게 없으며 자신은 빌드업을 하고 있을 뿐이라고 하신다. 아무튼 이렇게 조건문은 끝났다.
-반복문
"ㅋ"을 3번 띄우라고 해서 했더니 "ㅋ"을 23468327번 띄워 달란다..
횟수가 명확하게 특정 작업을 X번 반복.
for
조건이 명확하게 특정 작업을 반복. ex) 내일 아침까지 반복
while, do-while
for(변수생성초기화; 조건식; 증감){
작업
}
작업순서
1 : 변수생성초기화
2 : 조건식 검사
3 : 작업
4 : 증감
5 : 조건식 다시 검사
6 : 조건식이 맞으면 다시 작업
7 : 다시 증감
이런식으로 어느 순간 조건식이 안 맞을 때 까지 반복을 한다.
i 는 인덱스라고 불리며 출력해도 상관은 없다. (1 ㅋ 2 ㅋ 3 ㅋ 4 ㅋ 이런식으로 출력 됨.)
1 부터 2, 3, 4, 5 6 7 순서대로 출력을 원한다.
위와 거꾸로를 원한다.
이 둘 외에도 산술 규칙을 찾아내서 반복문을 만드는 예제를 여러개 해봤다.
그리고 강조 하셨던게 반복문에 변수를 만들면 컴퓨터 터진다. 그러니까 제발 for 밖에 쓰라고 하신다.
Java 에서는 변수 만들고 값을 안 넣으면 0이 아니고 못 쓰는 변수가 되버려서 에러가 난다.
이후 머리를 불태웠다.
반복문 속의 반복문
놀랍게도 2단 부터 9단 까지 외워준다.
근데 이렇게 말고
2단 3단 4단 5단 6단 7단 8단 9단 밑에 주르륵 나오게 해달란다.
이거 진짜 몇 줄 안 되는데 뇌에 쥐 날 뻔 했다.
엑셀 행, 열로 생각 했을 때 바깥쪽에 있는 것이 행, 안쪽에 있는 것이 열이라 생각하면 편하다. (기본형)
5열 5행으로 ㅋ이 찍혀 나온다.
그리고 다시 시작된 머리 태우기
위에 예제를 전부 끝내고 while에 대해 배웠다.
while (조건식) {
조건식 맞으면 여기 실행하고 다시 검사하러
}
예문 작성 후 갑자기 Random에 대해 알려주셨다.
0~10 까지의 숫자를 랜덤하게 출력해준다.
이것을 숫자 7이 나올 때 까지 반복하려면
이런식으로 언제 끝날지 모르는 조건을 포함한 반복문은 while을 사용해야한다.
do while은 if문과 적는 방법은 비슷하며
while 처럼 검사를 한 뒤 시작하는게 아니고 일단 질른 다음에 조건 검사를 한다.
그러니까 차이는 while은 조건식에 따라서 한번도 반복이 안 될 수 있지만 do while은 한번은 꼭 반복이 보장 된다.
"한번은 꼭 반복 보장이 필요하다면 do while 문을 쓰면 됩니다는 무슨 애초에 조건식 잘 쓰면 되지 안 씁니다 저는"
-반복문 제어
break : 반복문 끝 (반복! 멈춰!)
continue : 밑에 남은 거 하지말고 바로 위로 올라가라. (강제 턴 종료)
while이 작업내용을 밑에 쓰고 조건을 위에 쓰기 때문에 작업내용을 조건에 쓰기가 애매해서 지저분하게 비슷한 의미의 코드를 또 적어야 되는 불상사가 생김.
그래서 보통 이렇게 조건식에 true를 넣어서 do while의 기능도 챙겨가면서 조건식을 밑에서 작업이 가능하다.
반면에 반복문 안에 switch case를 이용하여 break를 먹이려고 하면 break가 중복이 되어 가장 가까운 case를 멈추게 되고 while의 반복문을 끝낼 수가 없어 이용하지 않는다. (밑에 사진의 경우 end를 쳐도 계속해서 입력 해주세요가 나온다.)
하지만 for안의 for안의 for에 있는 break가 첫번째 for에 적용이 되려면 어떡해야할까?
(Pyton은 없다. Java 1.5 이상이면 해결책이 있다.) 위의 while 문장으로 예시를 들자면
이렇게 반복문 앞에 이름을 붙혀주고 (여기서는 aaa, bbb) 브레이크 뒤에 내가 끝내고 싶은 반복문의 이름을 입력 해주면 해당 반복문으로 break가 걸리게 된다. for 문장도 마찬가지로 이용이 가능하다.
문제를 내주셨다.
UpDown 게임.
컴퓨터가 1 ~ 10000 사이의 숫자 하나 생각하게 하고
숫자를 입력 하면 up, down 값을 뱉어내고
정답을 맞히면 "5번 만에 정답" 이라는 출력이 나오게.
굉장히 재밌게 만들었다 애매한건 질문 해가면서 만들기도 했고 정답 입력 횟수 카운팅 하는 법을 몰라서 좀 해맸는데 옆자리 친구가 기가막힌 방법을 말해줘서 그대로 적용했다. (int a = 0이라는 임의의 변수를 만들어 놓고 while 문을 반복할 때 한번씩 1이 더해지게 하고 정답멘트 출력 시 그 a를 넣어준다.)
뿌듯하게 실행파일로 만들어 또 업로드 해놓겠으니 심심하신 분들은 한번 해보시길 바랍니다.
오늘은 진짜 머리 터질뻔한 날인데 그래도 저거 앵간치 만드는거보니 이해는 한 것 같다. 뿌듯하다..!