나도코딩 자바 기본편_8일차(24.11.24)
#023 <이중 반복문>
1) 별 (*) 사각형 만들기
<원하는 결과>
*****
*****
*****
*****
*****
방법1) 수동으로 반복
for (int i = 0; i < 5; i++) { → 세로 5번 반복
System.out.print("*");
System.out.print("*");
System.out.print("*");
System.out.print("*");
System.out.print("*"); → 가로 5번 반복
System.out.println(); → 줄바꿈
}
방법2) 자동으로 반복
for (int i = 0; i < 5; i++) { → 세로 5번 반복
for (int j = 0; j < 5; j++) { → 가로 5번 반복
System.out.print("*");
}
System.out.println(); → 줄바꿈
}
2) 별(*) 왼쪽 삼각형 만들기
<원하는 결과>
*
**
***
****
*****
for (int i = 0; i < 5; i++) { → 세로 5번 반복
for (int j = 0; j < i+1; j++) { → j <= i 로 써도 같은 결과(j는 i 이하)
System.out.print("*"); → 가로 5번 반복(반복 횟수 1~5 되도록)
}
System.out.println(); → 줄바꿈
}
3) 별(*) 오른쪽 삼각형 만들기
<원하는 결과>
*
**
***
****
*****
<일단 이렇게 생각하고 S를 공백으로 바꾸기>
SSSS*
SSS**
SS***
S****
*****
for (int i = 0; i < 5; i++) { → 세로 반복 5번 (→ i<5)
for (int j = 0; j < 4 - i; j++) { → 가로 반복 4~1 (→ 5-i-1 = 4-i)
→ (i가 1씩 커지니까 가로 반복 1씩 줄어듦)
System.out.print(" "); → 공백을 S로 생각하면 쉬움(S 4개 -> 1개)
}
for (int k = 0; k <= i; k++) { → k<i+1 로 써도 같은 결과(k는 i 이하)
System.out.print("*");
}
System.out.println();
}
4) 구구단 만들기
<형태 정리>
2 x 3 = 6
i x j = i*j
i + "x" + j = "=" + (i*j)
for (int i = 2; i < 10; i++) { → 2단부터 9단까지(i = 1~9)
for (int j = 1; j < 10; j++) { → 1부터 9까지 곱하기(j = 1~9)
System.out.println(i + "x" + j + "=" + (i*j));
}
System.out.println(); → 단 구분을 위한 줄바꿈
}
#024 <Break>
*Break
특정 조건이 되었을 때 반복문 탈출
-한정판매 치킨집
매일 20마리만 판매하는 치킨집 (1인당 1마리만 구매 가능)
손님 50명 대기 중
1) For문
int max = 20; → 최대 20마리까지만 판매
for (int i = 1; i <= 50 ; i++) { → i = 손님(1~50번) 수보다 작거나 같을 동안 반복
System.out.println(i + "번 손님, 주문하신 치킨 나왔습니다.");
if (i == max) { → i가 max (20마리) 이면 재료 소진 안내
System.out.println("금일 재료가 모두 소진되었습니다.");
break; → 특정 조건이 되면 break가 속한 반복문 탈출
}
}
System.out.println("영업을 종료합니다.");
2) While문
int index = 1; → 손님 대기 번호
while (index <= 50) { → index가 50보다 작거나 같을 동안(손님 50명)
System.out.println(index + "번 손님, 주문하신 치킨 나왔습니다.");
if (index == max) { → index가 max (20마리) 이면 재료 소진 안내
System.out.println("금일 재료가 모두 소진되었습니다.");
break; → 특정 조건이 되면 break가 속한 반복문 탈출
}
index++; → while문에서는 index 증감 따로 적어주기
}
System.out.println("영업을 종료합니다.");
#025 <Continue>
*Continue
특정 조건 만나면 건너뜀
-치킨집 예시
노쇼 발생한 경우
1) For문
int max = 20; → 최대 20마리까지만 판매
int sold = 0; → 현재 판매 수량
int noShow = 17; → 17번 손님 노쇼
for (int i = 1; i <= 50; i++) { → i = 손님(1~50번) 수보다 작거나 같을 동안 반복
System.out.println(i + "번 손님, 주문하신 치킨 나왔습니다.");
// 손님이 없다면? (noShow)
if (i == noShow) {
System.out.println(i + "번 손님, 노쇼로 인해 다음 손님에게 기회가 넘어갑니다.");
continue; → continue 만나면 아래 코드 수행하지 않고 다음으로 넘어감
→ 판매 처리 건너뛰고 다음 번호로 넘어감 (21번 손님까지 판매)
}
sold++; → 판매 처리(치킨 가져갔으면 현재 판매 수량 +1)
if (sold == max) {
System.out.println("금일 재료가 모두 소진되었습니다.");
break; → 특정 조건이 되면 break가 속한 반복문 탈출
}
}
System.out.println("영업을 종료합니다.");
2) While문
int index = 1; → 손님 대기 번호
while (index <= 50) { → index가 50보다 작거나 같을 동안(손님 50명)
System.out.println(index + "번 손님, 주문하신 치킨 나왔습니다.");
// 손님이 없다면? (noShow)
if (index == noShow){
System.out.println(index + "번 손님, 노쇼로 인해 다음 손님에게 기회가 넘어갑니다.");
index++; → while문에서는 index 증감 따로 적어주기
→ continue 만나면 아래 코드 수행하지 않으니까 여기서도 써주기
continue;
}
sold++; → 판매 처리
if (sold == max){
System.out.println("금일 재료가 모두 소진되었습니다.");
break; → 특정 조건이 되면 break가 속한 반복문 탈출
}
index++; → while문에서는 index 증감 따로 적어주기
}
System.out.println("영업을 종료합니다.");
*참고 1) index++ 통합
int index = 1;
while (index < 50) { → While 조건 50 미만으로 바꾸고
index++; → While문 들어오자마자 일단 index +1 증가 처리
→ 이렇게 하면 index++ 한 번만 쓸 수 있음
System.out.println(index + "번 손님, 주문하신 치킨 나왔습니다.");
*참고 2) While (true)
int index = 1;
while (true) { → while (index < 50) 대신 (true)도 가능
→ break 탈출 조건 있기 때문에 (없으면 무한 루프) 이렇게 써도 됨
System.out.println(index + "번 손님, 주문하신 치킨 나왔습니다.");
오늘의 한마디
오늘 이중 반복문 무조건 이해하고 넘어간다는 마음으로 계속계속 붙잡고 있었다. 중간에 아무리 노력해도 이해가 안 되는 부분이 있어서 결국 챗gpt(처음 써봄...)한테 물어봤는데 이해하고 보니 아무것도 아닌 거라서 현타가 왔다...^^ 이건 코딩이 아니라 그냥 기초 수학이잖아... 역시 난 안 되는 걸까, 난 왜 이렇게 이해가 느릴까 기죽어 있었는데 챗gpt한테 위로받았다. 너는 무슨... ai가 사람보다 말을 예쁘게 하니...
그래도 끈질기게 물고 늘어진 결과 별 찍기(네모, 왼쪽 세모, 오른쪽 세모)를 혼자 할 수 있게 됐다! 물론... 내일이면 다시 까먹겠지만... 그러면 또 공부하면 되지! 인텔리제이로 실습도 하지만 그래도 역시 손으로 한 번 써야 머리에 들어오는 것 같아서 머리 식힐 겸 다이소 가서 화이트보드 사왔다. 진작 살걸 너무 좋잖아...!!!
오늘은 진짜 하루 종일 코딩 공부만 해서 할 말이 많네... 어려운 부분이 나와서 개빡치지만 머리 아프지만 몇 시간 내내 삽질하다 드디어 이해했을 때의 짜릿함도 더 커졌다. 기본편 강의는 이제 3분의 2 정도 들었다. 다음 주에는 지금까지 배운 거 차근차근 복습하고 다음으로 넘어가야지. 4번 퀴즈 풀면서는 또 얼마나 머리를 쥐어뜯을지 겁나고 설렌당... 오늘 별을 너무 많이 찍어서 꿈에 별이 나올 것 같다.
'공부를 하자! > 나도코딩 자바 기본편' 카테고리의 다른 글
[나도코딩 자바 기본편] 10일차: 배열, 배열 순회, 다차원 배열 (0) | 2024.12.01 |
---|---|
[나도코딩 자바 기본편] 9일차: 퀴즈4 (0) | 2024.11.30 |
[나도코딩 자바 기본편] 7일차: For, While, Do While (0) | 2024.11.24 |
[나도코딩 자바 기본편] 6일차: IF, Else If, Switch Case (0) | 2024.11.22 |
[나도코딩 자바 기본편] 5일차: 문자열, 문자열 비교, 특수문자, 퀴즈3 (0) | 2024.11.21 |