티스토리 뷰

꿈꾸는 어린 양/공부해요

java 기초 강좌

어린양 Lami 2017.08.10 18:30

연재를 할지 어떨지는 모르겠지만 일단 지금까지 대화한 부분 정리.



반복문에는 for, if, while 세가지가 있죠?


for를 사용한다면

"시작점을 주고, 그게 다섯번 반복될 동안 별을 다섯개 찍는다."


그래서 코드는 아래와 같은 형태가 됩니다.


for(     다섯번 반복하는 조건    ) {

   별을 다섯개 그려요


이 다섯번 반복하는 조건을 컴퓨터가 알아듣도록 바꿔볼게요.


for(     시작숫자 ; 한 번 실행할 때마다 시작숫자를 이렇게 바꿀거야 ; 종료조건     ) {

   별을 다섯개 그려요



for문은 순서가 중요해요.

시작해서 ; 어떤 행동을 해서 ; 어디까지

라는 순서를 꼭 지켜줘야만 알아듣거든요.


그럼 이제 시작을 정하는거예요.

숫자를 셀 때 1, 2, 3, 4, 5 라고 세는 사람도 있고

5, 4, 3, 2, 1 이렇게 세는 사람도 있죠?


컴퓨터는 이상하게 꼭 0부터 세더라구요. 1부터 하면 쉬운데말야.

그래서 우리는 0, 1, 2, 3, 4 라고 숫자를 셀거예요


for ( 0부터 ; 숫자 하나씩 증가 ; 4까지 ) {

   // 별표를 칠거야


이걸 좀더 기호로 표현하면


for ( i=0 ; i++ ; i<=4 ) {

   // 별표를 칠거야

}


for ( i=0 ; i++ ; i<5 ) {

   // 별표를 칠거야

}  


for ( i=101 ; i++ ; i<=105 ) {

   // 별표를 칠거야


여러가지로 변형이 가능하죠?


그런데 여기에서 하나 더.

컴퓨터야 여기서 말하는 i는 정수란다- 하고 알려줘야해요.


그게 바로 int i; 

integer(정수) 속성을 가진 i라는 아이를 사용할거라고 미리 알려주는거예요.


int i;


for ( i=0 ; i++ ; i<5 ) {

   // 별표를 칠거야

}  


for ( int i=0 ; i++ ; i<5 ) {

   // 별표를 칠거야

}  


두 소스의 차이가 보이세요?


처음건 for문 바깥에 i가 int라고 알려줬죠?

이건 이 다음에 다른 곳에서도 i를 또 사용할지도 모른다는거예요.


두 번째는 for 안에 int i 라고 알려줬죠?

이 말은 for문 안에 있는 i만 int고 나중에 i가 또 나오면 그 때 다시 알려준다는 의미예요.


앞에서 S님이 변수 x나 y를 사용하고싶다고 하셨는데, 우리가 정사각형이 아닌 직사각형을 그리게 될수도 있으니 변수는 두 개를 모두 사용해볼게요. 정사각형이라면 x만 적용하면 되니까요. :)


그럼 컴퓨터에게 먼저 알려주는거예요.

나는 지금부터 두 개의 숫자를 사용해서 명령을 할거야.

사각형을 그릴건데 가로로 x개, 세로로 y개 크기의 별사각형을 그리고싶어.


int x=5; // 가로로 다섯 칸

int y=3; // 세로로 다섯 칸


먼저 세 줄을 만들거야.


for (int i=0 ; i++ ; i<y ) { // 숫자 0부터 하나씩 세어 y(3)보다 작을때 까지 총 세 번 반복 실행할거야

   // 별을 그리겠어

}


그런데 그 별은 x번만큼 반복해서 그릴거야.


for (int j=0 ; j++ ; j<x ) { // 숫자 0부터 하나씩 세어 x(5)보다 작을때 까지 총 다섯 번 반복 실행할거야

   print( "*" ) ; // 원하는 만큼 별을 찍고

}

println(); // 마지막에는 줄을바꿀거야


아제 소스를 합쳐볼까요?


int x=5; // 가로로 다섯 칸

int y=5; // 세로로 다섯 칸

int i , j ; // 그 외에도 i랑 j라는 아이들도 쓸건데 값은 나중에 알려줄게


for (i=0 ; i++ ; i<y ) { // 5개의 줄을 만들고

   for (j=0 ; j++ ; j<x ) { // 5 번 반복하여

       print( "*" ) ; // 별을 찍고

    }

    println(); // 줄바꿈

}                                                               


초록 부분은 단순히 println("*****");으로도 대체 가능해요. :)


여기서 바로 2 번으로 가기보다 5 번을 먼저 하는게 쉬울것같아요.



int x=5; // 가로로 다섯 칸

int y=5; // 세로로 다섯 칸

int i , j ; // 그 외에도 i랑 j라는 아이들도 쓸건데 값은 나중에 알려줄게


for (i=0 ; i++ ; i<5 ) { // 5개의 줄을 만들고

   for (j=0 ; j++ ; j<=i ) { // i+1 번 반복하여 (줄 번호는 0부터 시작하므로)

       print( "*" ) ; // 별을 찍고

    }

    println(); // 줄바꿈

}                                                               



2 번은 위의 연장선이라고 보시면 될거같아요.

다섯 줄을 만들텐데 각 줄마다 줄 번호에 해당하는 위치에만 별표를 쳐줄거야.


그러려면 각 줄마다 (줄번호)-1 번째 칸에는 빈 칸이 들어가고

x번째에만 별을 그려야겠지?


int x=5; // 가로로 다섯 칸

int y=5; // 세로로 다섯 칸

int i , j ; // 그 외에도 i랑 j라는 아이들도 쓸건데 값은 나중에 알려줄게


for (i=0 ; i++ ; i<y ) { // y개의 줄을 만들고

   for (j=0 ; j++ ; j<i ) { // (줄번호-1) 번 반복하여

       print( " " ) ; // 빈 칸을 찍고

    }

    println("*"); // 마지막에 별을 찍고 줄바꿈

}                                                               


그럼 3 번을 하기위해선 6번을 먼저 해보는게 편할것같죠?







신고

'꿈꾸는 어린 양 > 공부해요' 카테고리의 다른 글

java 기초 강좌  (0) 2017.08.10
댓글
댓글쓰기 폼