java 이야기

[반복문] for 문 & 중첩 for문

SM.K 2021. 3. 1. 11:12

앞서 배운 조건문(if, switch)는 말그대로 조건이 있을때 if문에서는 참을 판별해서 결과값을 도출하고 switch에서는 조건에 대해 각각의 case별로 구분해서 값을 도출하였다.

 

그렇다면 반복문(for, while)도 마찬가지이다. 어떠한 작업을 반복해야할 조건을 주고 조건에 맞으면 실행문을 반복적으로 하게하는 명령어라고 이해하면 좋을 것이다.

 

먼저 for를 살펴보자. (반복하는 시작범위과 끝범위를 알때 주로 사용)

 

여기서 문제!!

1부터 10을 출력문에 나타내보세요. 이 친구를 어떻게 표현할 수 있는지 생각해보자. 

 

얘는 10개밖에 없으니까 그냥 다 쳐보는 연산식을 사용하면 되겠다. 

ex) 나는 배열로 해보겠다.

int [] arr = new int[] {1,2,3,4,5,6,7,8,9,10};

System.out.println(Arrays.toString(arr));

 

1부터 20까지 나타내려면?

2부터 30까지의 나타내려면?

3부터 40까지의 나타내려면? 언제 다치냐고요 ㅠㅠ..

.

.

이렇게 작업 시작범위와 끝범위의 값을 알면서 반복적으로 해야할 때 바로 for문을 사용하면 되는 것이다.

 

<for 형식>

for(변수 선언 및 초기화; 조건식; 증감식) { //변수가 1일때 시작해서; 20에 도달할때까지; 변수1을 증가해

조건이 맞을 경우 반복할 실행문; //변수가 1부터 20까지 하나씩 증감하면 실행문을 나타내

}

 

1부터 20까지 나타내를 아래와 같이 for문으로 간단히 명령할 수 있다.

 

for(int=1; int i <= 20; i++) {

//1부터라는 i의 시작범위를 선언해주고; 20과 같거나 또는 작은 값의 조건; 시작범위 i가 하나씩 증가;

System.out.println(i); //i의 값이 변화되면서 반복적으로 실행문에 도출된다.

}

1부터 20까지의 범위의 합을 구할때도 for문을 사용할 수 있다.

int sum = 0;

//조건범위 안에서의 sum값이 필요하므로, 조건범위를 벗어나면 더하기를 멈추기 때문에 sum 변수를 for문 밖에서 선언해야함

for(int=1; int i <= 20; i++) {

//1부터라는 i의 시작범위를 선언해주고; 20과 같거나 또는 작은 값의 조건; 시작범위 i가 하나씩 증가;

sum+=i; // sum = sum+i;와 같은 말인데 sum값에 i를 20까지 증가하는 조건을 sum에 대입하겠다는 뜻이다.

sum이 0일 때 , i는 1이 되고 -> sum = 0 + 1 즉 sum = 1; 첫번째 1을 실행할 때는 sum 결과값이 1이 되는 것이다. 

sum이 1일 때 , i는 2이 되고 -> sum = 1 + 2 즉 sum = 3; 두번째 2를 실행할 때는 sum 결과값이 3이 되는 것이다. 

이걸 20까지 반복해서 돌리면 제일 마지막 sum은 210 될것이다

}

System.out.println("1부터 20까지의 합은 " + sum); //전부 더해진 sum값을 도출해야하므로 출력문에는 sum기입

 

 

for를 중첩으로 사용할 수도 있다. 이를 중첩 for문이라고 한다.

 

<중첩 for형식>

for (int i = 1; i <= 10; i++) { i 초기값은 1, 범위는 10까지, 1씩 증감

    for(int j = 1; j <= i; j++){ j 초기값은 1, 범위는 i까지, 1씩 증감

        System.out.print(i + "-" + j);

}

i 가 1일때 j는 i까지니까 1까지  1(i값)-1(j값)

i 가 1증가해서 2가 되면 j는 i까지니까 1부터 2까지  2(i값) - 1(j값) 

                                                                    2(i값) - 2(j값) 

i 가 1증가해서 3이 되면 j는 i까지니까 1부터 3까지  3(i값) - 1(j값)

                                                                   3(i값) - 2(j값) 

                                                                   3(i값) - 3(j값)  이런식으로 조건범위인 10까지 중첩이 되는 것이다.

 

중첩 for문으로 *을 찍어보는 연습을 학원에서 해보았는데 한번 복기해봐야겠다!

 

for(int i = 1; i <= 5; i++) {//바깥 for문을 편의상 for문 1)

  for(int j = 1; j<=i; j++) {//안쪽 for문을 편의상 for문 2)

    System.out.print("*"); // 줄 안바꿈 print

}

    System.out.println(); // 줄바꿈 println

}

i 가 1일때 j는 i까지니까 1(i값)-*1(j값) // *을 한개 찍는 실행을 하면 2)에서 나오면서 i를 2로 증가시키고 1)로 이동하면서 줄바꿈을 한다 

i 가 2일때 j는 i까지니까 2(i값) - ** 2(j값) // **을 2개 찍고 2)를 나오면서 i를 3으로 증가시키고 1)로 이동하면서 줄바꿈을 한다

i 가 3일때 j는 i까지니까 3(i값) - *** 3(j값) // ***을 3개 찍고 2)를 나오면서 i를 4으로 증가시키고 1)로 이동하면서 줄바꿈을 한다

i 가 4일때 j는 i까지니까 4(i값) - **** 3(j값) // ****을 24개 찍고 2)를 나오면서 i를 5으로 증가시키고 1)로 이동하면서 줄바꿈을 한다

i 가 5일때 j는 i가 같거나 커야하니까 5(i값) - ***** 5(j값) // *****을 5개 찍고 2)를 나오면서 i를 더이상 증가시키지 않고 for문을 끝낸다.

 

그럼 아래와 같이 별을 어떻게 하면 찍을 수 있을까?

 

****

****

****

****

 

컴퓨터는 처리방향은 위에서 아래로이다. 

*

*

*

*

**

**

**

**

***

***

***

***

****

****

****

****

 

이러한 방식으로 쳐서 마지막의 4개행과 4개열의 *들을 완성한 것이다.

i가 1일때 j를 4번를 돌려서 별을 4개 찍고 //i를 행으로 보면 쉽다.

i가 2일때도 j를 4번 //j는 열로 보자

i가 3일때도 j를 4번

i가 4일때도 j를 4번를 하면..?

 

 

다음은 또다른 반복문인 while문을 공부해보도록 하자!