본문 바로가기
> 프로그래밍 언어/JAVA

[그림으로 배우는 자바, part1]: 07 반복

by 자몽주스 2023. 2. 20.
728x90

그림으로 배우는 자바,

파트1: 입문!

반복문

참고 사이트:

자바, 입문하기! | CloudStudying

반복문, 규칙적 코드의 압축!

< 반복문 종류 (2) >

for문 - 반복횟수 명확할 때

while 문 - 반복횟수가 불분명할 때

- 반복문 사용할 때 주의할 점 - 

끊임없이 반복되는 상황을 주의해야 한다

 while 문, 카운트 다운

- while문 구조 -

 소괄호 안 쪽엔 조건식

중괄호 안쪽엔 반복 내용을 쓴다

 

1) 조건식이 인지 검사를 먼저한다

2) 이면 중괄호 안 쪽의 반복내용을 수행하게된다

3) 반복내용 실행이 끝나면 다시 조건식으로 되돌아온다

4) 조건식이 참이면 또 반복을 하게되는 것

5) 조건식이 거짓이 될 때까지 반복문이 실행됨

 n 이라는 변수에 4라는 값을 넣고있다

 4, 3, 2, 1 출력하도록 하자

 

while 문을 만나면 우선 소괄호 속에 있는

조건식을 먼저 확인한다

n = 4 > 0

이니까 이다

그래서 4 가 출력된다

 

그러고 나서 중괄호 안 쪽

n--;

를 수행하게되는데

n 의 값을 1 감소시키라는 의미이므로 

n의 값이 4였는데 1 감소돼서 3 이 된다

 

그렇게되면 더이상 중괄호 안쪽에

수행할 내용이 없게되므로

실행의 흐름이

다시 조건식을 검사하게끔

돌아간다

 

다시 n > 0이 성립되는지 검사하게 되는데

n이 아까 1 감소해서

3이 되었고,

 

아직까지는 조건식이 성립하므로

3이 출력되고

n--; 에 의해

1 또 감소하게 된다

2로 줄어들음

 

계속 줄어들다가 n 이 0이되면

조건식이 참이 아닌

거짓으로 되므로

중괄호 반복문이 더이상 수행되지 않는다

그러고 실행의 흐름은 while 문을 벗어나게 됨

1) 입력값 받기

5를 입력하게되면

문자열 5를 정수 5로 반환해서

그 값이 startNum 에 저장된다

Integer.parseInt(args[0]); 

 

2) 카운트 다운 출력

startNum 을 갖고 countDown 메소드를 호출함

3) 조건식 작성하기 (while 문)

n 이 0 보다 크면 반복하기인

(n>0)을 조건식으로 넣으면 출력이 안된다

왜냐하면 n이라는 변수가 선언돼있지 않기 때문이다

n 대신에 파라미터 num 을 사용하면 된다

num 이라는 변수의 값 5가 들어가게 되면

0보다 크니까 중괄호 안쪽의 반복문이 실행됨

 

근데 num > 0 은 0 까지는 출력이 안되고

1까지만 출력이 될 것이다

=> 왜냐하면 0이랑 같으면 수행하지 않기 때문

 

 

비교연산자를 

>= 

(크거나 같다)

로 수정해주면 0까지 출력 가능하다

for 문, 1부터 N까지

< for 문 >

세미콜론(;)을 기준으로 해서

3개의 구성요소로 이뤄져 있다

 

그리고 중괄호 안 쪽

반복할 내용이 들어있다

 

1) 초기설정을 먼저 함

 

2) 그 다음으론 조건식을 검사한다

 

3) 조건식이 참 이면

중괄호 안 쪽의 반복내용을 실행한다

 

4) 반복내용이 끝나면

3번째 구성요소인 

갱신을 수행한다

 

5) 갱신도 끝나면 다시 2번째 구성요소인 조건식을 검사

 

조건식이 거짓이 될 때 까지 반복한다

거짓이 되면 실행되지 않고

for 문 바깥으로 나온다

- 숫자 출력하기 -

1) 초기설정

= 1 이라는 값이 변수 i 에 저장되는 것

 

2) 조건문 영역 수행

1 은 4보다 작으니까

조건문은 참이다

고로, 중괄호 안 쪽 반복문이 실행되게 됨

3) i 값이 1 이니까 1이 출력됨

그러고나서 갱신을 하게된다

(i++)

i++ 연산자는 현재 i 값을 증가시키라는 의미

= 1 에서 2 로 i 값이 증가됨

 

4) 다시 조건식을 검사한다

i < = 4

i가 2니까 조건식은 참이다

 

반복되다가.

조건식이 거짓이 되면

( i 가 5 인 경우)

더이상 반복되지 않고

for 문을 빠져나간다

메인메소드에서 printNumbers 메소드를 호출하고 있는 상태

 

입력값에 7을 입력하면

문자열 7 이 args[0] 에 대입이 되고,

문자열 -> 정수로 변환이 된다

그리고 그 값 ( 정수 ) 가

변수 n 으로 저장이 된다

=> int n

 

그러고나서 실행의 흐름이

printNumbers(n)로 넘어감

 

1 부터 7 까지 출력하기

7이라는 값을 입력값으로 봤기 때문에,

max라는 변수 사용해서

작성해준다

4가 아니라 max 로 바꿔준다

break 문, 반복탈출

실행이 되다가 반복문에 대한

조건식(다이아몬드)을 만나고

참이면 A,B,C 실행됨

그러고 나서 다시 조건식으로 되돌아가 검사한다

 

근데 중간만 실행하고(A, B)

그냥 그만 실행하고 나가고싶을 때

사용하는 것

break 문이다

 

조건식이 참이면 반복문을 탈출하라는 식

break문은 일반적으로

조건문에 맞물려서

사용이 된다

- break 문의 예시 -

1) 변수생성

0 이라는 값이 변수 sum 에 대입됨

2) for 문 통해 반복 수행 

i  가 4가 되면 빠져나가라고 돼어있는데 (break)

i 가 지금 1이므로 빠져나가진 못한다

그래서 break문은 수행되지 않고

총합을 구한다

sum += i

 ( i 값을 sum 에다가 더해서 넣어라)

 

 sum 은 0 이니까

0에다가 1을 더하라는 뜻

 

3) 수행이 끝나면  i++로 돌아가서

갱신된다

 i++를 하면 i는 2가되고

다시 조건식으로 검수를 한다

( i <=10; )

 

계속 반복하다가

i 의 값이 4가 된다면

 break 문이 실행되어

반복문을 탈출하게 된다

 

continue 문, 다음 반복으로

만약 A 까지만 수행하고

밑에 걸 수행하지 않은 채로

다음 반복인 조건식으로

그냥 넘어가고싶을 땐

continue 구문을 사용한다

( 실행 중간에 강제로 다음 반복으로 넘어갈 수 있음 )

조건문과 맞물려서 사용해주면 된다

 

예시 ex) 만약 조건식이 홀수라면

다음 반복으로 강제이동해라

1) sum 이라는 변수에 0이라는 값 초기화

 

2) for 문을 사용하여

1 ~ 7까지의 홀수의 총합을 구하기

(짝수는 제외)

i  나누기 2 는 0이랑 같다

= 짝수인가?

 

i 는 1이기 때문에

continue 구문은 시행되지 않고

sum을 갱신하는 영역으로 간다

 

sum 에 i 값 더해서

sum = 1 이되고

 i 는 i++ 에 의해 1 증가돼서 2가 된다

 그리고 다시 조건식 i <=7을 검사한다

2는 짝수이므로 continue 구문이 수행돼서

아래에 있는 구문 ( sum += i )는 시행되지 않고

강제로 다음 반복으로 넘어가게된다

 

 sum의 값은 갱신되지 않고

i 의 값만 증가됨

( i = 3 )

 

3 은 7보다 여전히 작고 짝수가 아니니

다시 sum을 갱신하게 된다

( sum += 3 ) 

( i = 4 )

 이런 식으로 반복되면

sum 의 값은 16이 나오게 된다

sum = 0

0 + 1 + 3 + 5 + 7 = 16

중첩된 반복문, 행렬 출력

< 중첩 반복문 >

- 별표시 출력 연습 -

 

총 행은 7행이고

총 열은 4열이다

1 줄을 7번 출력하면 된다

각 행을 보면 4번 반복하고 있는 셈

한 줄을 7번 출력하고

각 행을 4번 반복하니 4번 출력

 

바깥에 7번 반복하는 반복문을 두고

그 안쪽에 4번 반복하는 반복문을 둬서 출력해준다

row - 행

row = 0 부터 7보다 작을 때 까지

( 0 ~ 6 까지 7번 반복)

row ++ 해서

각 행을 7번 출력가능

행을 쪼개서

 중첩된 반복문을 만들기 위해

 

해당 반복문 안에다가

또 반복문을 만들어 넣어준다

 

for문으로 표현할 건데

" **** " 을 " * " 로 쪼개서 표현해준다

 

0부터 시작해서 4보다 작을 때까지의 패턴

기억해두는 것이 좋다

=총 4번에 됨

4번 반복을 끝내고

줄 개행을 나타내기 위해 (엔터)

println 메소드를 추가해준다

728x90