티스토리 뷰

반복문에 관한 설명이 이번강좌와 다음강좌면 끝이 날거라 예상하고 있습니다 ㅋ

그러는 동시에 제 java책 챕터5가 끝나게 되지요 ㅋㅋ

즉 여러분께선 프로그램에서 흐름을 잡는 if, 스위치, while에 대한 설명이 끝나게 되는것 이지요 ㅎㅎ

돈안내고 책을 본다는 느낌이 들수도..


아무튼 늦은밤 빨리 써내려가겠습니다


오늘 배울 continue와 break는 while과 switch문처럼 반복문은 아니지만

이런 반복문 중간에 들어가 작업을 하게 만드는(?) 키워드 입니다


먼저 조금 익숙한 break에 대해 알아보겠습니다


class Break
{
  public static void main(String[] args)
  {
    int Mir=1;
    boolean number=false;

    while(Mir<100)
    {
      if(Mir%3==0 && Mir%7==0)
      {
        number=true;
        break;
      }
      Mir++;
    }

    if(number)
        System.out.println("3과 7의 최소 공배수는 " + Mir + "입니다");
    else
        System.out.println("100 미만 3과 7의 최소 공배수를 찾을수 없습니다");
  }
}


Break.java


점점 소스의 양이 많아지는걸 느끼시겟나요?

보시면 간단한 구조로 이루어져 있음을 알 수 있습니다


먼저 int와 boolean으로 변수를 선언한다음 while문으로 반복하고 있는대요

"Mir%3==0 && Mir%7==0" 이 부분이 이해가 가지 않으신다면... 뒷 강좌를 다시 보셔야 합니다

Mir를(저는 아니고요;;) 3으로 나눈 나머지가 0이고 또한 Mir를 7로 나눈 나머지가 0이 동시에 될때 &&연산에 의해 true가 반환되어 집니다

그순간 if절이 실행되어 number을 ture로 바꾸고 break로 while반복문을 빠져나오게 되지요


여기서 break가 실행될때 if문 안에 있어서 if문이 끝나는게 아닌가 라는 생각이 드실수 있으실탠대요

반복문은 while, for, do~while등이지 if문이 반복문이라 배우진 않았습니다

그러므로 break가 실행되면 가장 가까운, 자신을 감싸는 반복문을 빠져나오게 되는것 이지요


while을 빠져나왔고 number을 true로 바꼈으니 그다음 if절에서는 최소공배수의 숫자가 나타나게 되는것 이지요


만약 100안에 값이 나오지 않을경우 while(Mir<100)에 의해 반복문을 빠져나오게 될것이고

true로 바뀌지 않았음이므로 마지막 if문에서는 else가 실행되겠죠?



이렇게 break문은 반복문을 중단시키는 역할을 합니다

반복문이 중첩되어 있다면(아마 다음강좌에서 언급할듯 합니다) 하나의 반복만 빠져나올수 있는대요

그때는 레이블을 설정해 한번에 중첩된 반복을 빠져 나올수도 있습니다



그럼 break에 대한 설명은 끝난듯 합니다 ㅋ 쉬워요 ㅎ

이어서 continue에 대해 설명하겟습니다

설명하기전 continue는 오타가 쉽게 나더라고요.. 이해 부탁드리겠습니다..


continue는 break와는 너무나도 다른 기능을 지니고 있습니다

break가 반복문을 끝내는 역할을 한다면

continue는 실행되면 아래 반복 영역을 실행하지 않고 조건 검사로 넘기는 역할을 합니다



그림으로 설명하자면 이렇게 되지요

continue가 실행되면 그 반복문의 조건검사 부분으로 넘어가게 되지요


예제를 보겠습니다


class Continue
{
  public static void main(String[] args)
  {
    int M=0, count=0;

    System.out.println("200이하 숫자중 3과 7의 최소 공배수 목록");

    while(M++<200)
    {
      if(M%3!=0 || M%7!=0)
        continue;
      count++;
      System.out.println(M);
    }

    System.out.println("3과 7의 최소 공배수의 수 :"+count);
  }
}


Continue.java


while문을 보시면 반복 영역이 실행되자 마자 if문이 실행됩니다

M%3!=0 || M%7!=0을 보시면 다들 아시죠...?

다들 아실거라 생각해서 연산의 특성은 생략하겠습니다

||연산으로 true가 나오게 되면 continue가 실행되면서 처음 조건 검사로 넘어갑니다

그러니 M%3!=0와 M%7!=0가 둘다 false여야 연산 결과가 false가 되며 continue가 실행되지 않습니다


즉, M%3!=0 || M%7!=0를 M%3==0 && M%7==0이렇게 바꿔도 된다는 결론이 나오게 됩니다

오해의 소지가 있어 글을 수정합니다.




위의 &&을 이용한 최소공배수 수를 구하는 코드와

아래의 ||을 이용한 최소공배수 수를 구하는 코드를 구분하실때는 전체적인 코드를 보셔야 합니다.


위 코드는 if문을 이용해서 100 미만인 3과 7의 최소공배수를 구하는 코드입니다.

if문을 보시면 M을 3으로, 7으로 나눈 값이 모두(&&) 0일때 break;를 사용해서 반복문을 종료하고 있습니다.


아래 코드는 if문을 이용하고 있지만, 또한 continue;를 이용해서 200 이하 수 중 3과 7의 최소 공배수를 구하고 있습니다.

if문을 보시면 M을 3으로 나눈 나머지가 0이 아니거나, 또는 7으로 나눈 나머지가 0이 아니면 continue가 실행되고, 저 if문이 false가 될 때, 즉, M%3!=0도 false, M%7!=0도 false가 될때 if(M%3!=0 || M%7!=0)가 false가 되어 continue;가 실행되지 않고 count++와 System.out.println()이 실행됩니다.



두 개의 코드는 무엇을 구하는지부터 다릅니다.

오해의 소지가 있도록 문장을 작성해서 죄송합니다.





아무튼 본론으로 돌아가서 false가 나오면 continue는 실행되지 않으므로 아래 count++와 println이 실행되는 것이지요


그리고 while문은 M++<200이 false가 될때까지 반복하게 되지요

여기서 M++를 보시면 postfix연산입니다 즉 이 행이 끝나야 값이 늘어나게 되지요

그러니 200도 연산결과에 포함되게 됩니다 (이해가 안되신다면 천천히 생각해 보시길 postfix의 연산특성을 생각해 보세요)



이렇게 해서 continue를 사용한 예제를 살펴 보았습니다

아러ㅏㄴ리ㅓ 이렇게 멘붕하시는 분이 계실까 모르지만 이해하면 완전 쉽습니다 ㅎㅎ


이제 무한루프를 배워야 하는대요

이번 강좌의 길이가 너무 길어지는 바람에...

다음 강좌에서 무한루프부터 반복문의 중첩까지 배워보도록 하겠습니다 ㅎㅎ

신고
댓글
  • Favicon of http://infinityitcommuity.tistory.com "infinity" 수고하십니다! 2013.03.03 09:53 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) 감사합니다 ㅎㅎ 2013.03.05 19:21 신고
  • Favicon of http://eskwon0228.tistory.com Mt.Night M%3!=0 || M%7!=0를 M%3==0 && M%7==0로 바꿀 수 있다는게 잘 이해가 안가는데...두 연산의 값이 반대로 나오지 않나요? 2016.02.04 15:39 신고
  • 진정한꿈틀 M%3!=0 -> M을 3으로 나눈 나머지 값이 0과 다른게 맞니? 맞으면 true 틀리면 false

    || ->or의 개념 둘중 하나라도 true면 true, 둘다 true면 true, 둘다 false면 false

    *정리*
    "M을 3으로 나눈 나머지 값이 0과 틀리니?"와 "M을 7로 나눈 나머지 값이 0과 틀리니?"라는 조건 중 하나라도 true이면 true, 둘다 false면 false

    M%3==0 -> M을 3으로 나눈 나머지가 0과 같니?

    && ->and의 개념 둘다 true면 true, 둘다 false면 false,두개의 값이 다르면 false

    *정리*
    "M을 3으로 나눈 나머지 값이 0과 같니?" 조건과 "M을 7로 나눈 나머지 값이 0과 같니?"라는 조건이 둘다 true면 true 둘중 하나라도 false면 false
    2016.08.05 01:29 신고
  • Favicon of http://itmir.tistory.com Mir(whdghks913) 두개의 코드를 바로 바꾸면 당연히 위험합니다.
    그러나 위 코드와 아래의 코드 주변을 보면

    &&을 쓴 코드는 M을 3으로 나눈 나머지와 7로 나눈 나머지가 모두 0일때, 즉 3과 7의 최소공배수를 찾고 있습니다.

    아래 || 코드에선 continue; 를 사용하고 있습니다.

    전체를 보셔야 이해가 가능하실겁니다.

    저 말은 오해의 소재가 있어 수정하도록 하겠습니다.
    2016.08.05 07:39 신고
댓글쓰기 폼