원지의 개발
article thumbnail
728x90

탈출문

  • 실행 순서를 지정된 곳으로 이동시키는 문장
  • 반복문 또는 블록구조에서 빠져 나올 때 사용
  • break, continue, return문이 있음

break

  • 반복문 내의 어떤 곳이든 위치
  • 가장 가까운 반복문 1개(if문 제외) 를 빠져나옴, 조건과 같이 쓰임
  • 중첩 반복문의 경우
    내부 반복문에서 break가 사용되었을 경우:  break문이 속한 내부 반복문만 빠져나옴
    바깥쪽 반복문까지 종료시키려면 바깥쪽 반복문에 이름(label) 을 붙이고, "break 이름;"을 사용

 

BreakEx01 - break의 위치

1. while 반복문 int = 1 ~ 10까지 반복임

2. i가 1이면 1출력, 2이면 2출력 반복

3. i가 5이면 빠져나감 -> 출력 X

    break의 위치가 출력 전에 빠져나오기 때문에

    1, 2, 3, 4만 출력

 

첫번째와 다르게 두번째는

3. i가 5일 때 i = 5를 출력 하고, if 조건문 확인

    -> break로 빠져나감

 

 

BreakEx03 - 중첩반복문 중에 break로 빠져나오기

                      A~Z, a~z 범위에서 A-f 까지만 나타내라

1. 3번까지 밑에 풀이와 같음

2. if문에서 나갈때 논리형식 boolean 변수 생성

    boolean flag = false;

3. flag = true; 라면 break로 나가라 (inner for문)

4. if문 추가 (outer for문)

 

 

 

 

 

 

 

 

 

 

1. char c가 A~Z까지고, 하나씩 증가

    A B C D E ...

2. 그 안에서 char l이 a~z까지 하나씩 증가

    a b c d e ...

-> A-a A-b A-c A-d... B-a B-b B-c...

3. if문 l == f 라면 break로 나가라.

     단, inner for문 하나가 아닌 ex이름이 붙은 for문까지 나가라.

 

 

 

 

 


continue

  • 사용시 반복문을 뛰어넘음. 바로 다음을 확인하러 감.
  • 반복문 내의 어떤 곳이든지 위치
  • 반복문의 맨 처음으로 제어가 이동하여 다음 반복문을 위한 증/감식을 실행 (밑의 실행문을 실행하지 않음)

 

 

 

 

 

 

 

 

 

 

ContinueEx01 - 1~10사이에 짝수만 출력

1. 반복문 while에서 i = 1 ~ 10일 때

2. if 조건문

    i=1, 나머지 1 -> if의 i++ = 2 -> continue로 뛰어넘고 while 반복

    i=2, 나머지 0 -> 다 뛰어넘고 출력, i++ = 3 while 반복

    i++; 들어가야 하는 위치 확인 필수 - while, if안에 다 있어야

    continue로 건너뛰어도 i가 증가하면서 실행될 수 있음

3. 다 돌면 프로그램 정상 종료

 

 

 

 


return

  • 메서드의 실행을 끝내고 결과 값을 호출된 부분에 반환
  • 단독으로 사용했을 때는 호출된 곳으로 제어만 넘어감
  • return문 뒤에 연산식과 함께 사용되면 식의 결과 값과 제어가 함께 넘어감

무한루프 (while, for)

  • 반복의 횟수를 가늠할 수 없을 때 무한루프 만듦
  • break문으로 빠져나옴 처리 -> 이름:(생성), 마지막에 break 이름;
  • while (true) {
         if ~
         break;
     }

BreakEx02 - 정답 맞출때까지 무한반복 입력 받음

1. Scanner 실행

2. 반복문 설정

    무한반복으로 입력되야 하기 때문에
     -> while문 안에서 scanner 객체 생성, 변수 answer 생성

3. if 조건문 ex) 정답 24

    answer == 24라면 정답 출력하고, break로 빠져나옴

4. 아니면 반복해서 돌아야 하기 때문에 while문에서 오답 출력

5. i가 5일 때 i = 5를 출력 하고, if 조건문 확인

    -> break로 빠져나감

6. if, while 빠져나오면서 프로그램 종료 출력

 

 

 

 

 

 

 

 

 

 

Quiz17 - up down 게임

풀이반복횟수를 알고 for 이용

1. 1~100까지의 랜덤 숫자 생성

    Math.random() * 100 +1

    100개 숫자를 원하니까 *100하고 +1

2. 반복문 for안에서 스캐너 이용 정답 입력 받음

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

           int answer = scan.nextInt();

     }

3. if 조건문

    1) ran < answer - 더 큰 수를 입력

    2) ran > answer - 더 작은수를 입력

    3) ran = answer - 정답입니다. 시도횟수 i

4. for문 빠져나가기

    시도횟수 나타낸 다음 break;

    or 완전 빠져나가기 해도 됨(굳이?)

 

선생님 풀이 - 무한반복 하다가 맞으면 빠져나옴 while 이용

1. 랜덤 숫자 생성

2. 무한루프 while 안에서 스캐너 이용 정답 입력 받음

    while (true) {

           int answer = scan.nextInt();

    }

3. if 조건문

    ran == answer이면 출력, 나머지 경우도 조건 붙이기

4. 시도 횟수 count 변수 생성

    반복할 때마다 +1이므로 if 밖, while안에 있어야 함

 

 

Quiz18 - 랜덤한 덧셈 문제를 내는 프로그램 (1)

풀이 - while문 안에서 if로 0, 정답, 오답 따로 따로 쓰기

1. 반복 할때마다 랜덤 숫자가 더해짐

    while 안에서 랜덤숫자(ran, ran2) 변수 생성

    ran + ran2 = ?, 정답 answer 입력 받음

2. if 조건문

    1) answer == 0 - 프로그램 정상종료, 횟수 출력

    2) answer == ran + ran2 - 정답입니다

    3) answer != ran + ran2 - 틀렸는데요?

3. 2-1)에서 정상종료할 때 break로 while 빠져나오기

    정답, 오답일때 빠져나오면 계속 반복할 수 없음

4. 정답, 오답 횟수 세기

    count, count2 변수 생성 (while 밖에서)

    if 정답일 때 count 1씩 세기

    if 오답일 때 count 1씩 세기

 

 

 

 

 

 

 

Quiz18 - 랜덤한 덧셈 문제를 내는 프로그램 (2)

선생님 풀이 - while 안에서 if로 0, 정답or오답 같이 쓰기

1. while문 안에서 answer 입력까지는 같음

2. if 조건문 1

    answer == 0 - break 탈출

3. if 조건문 2

    1) answer == ran + ran2 - 정답입니다

    2) answer != ran + ran2 - 틀렸는데요?

4. 정답, 오답 횟수 세기는 위의 풀이와 같음

5. answer == 0일때가 아닌 while 반복문이 끝날 때 출력

 

    while문 밖: 프로그램 정상 종료, 정답, 오답 횟수 출력

 

 

 

 

 


array 연습

ArraySearch - 배열 값 비교 인덱스 위치 찾기

1. 배열 선언, 생성, 초기화

2. 찾을 값 입력 -> find 변수 생성

3. for 반복문

    int i = 0; i < arr.length; i++

    i는 결국 인덱스 값임

4. if 조건문

    rr[i] = 배열의 값이 find값과 같으면

    몇번째에 있는지 알려줘라

5. 위치 index 변수 생성, 없으면 -1로 나타냄

6. if가 true이면 i값을 index에 넣어라

    index = i;

7. break로 반복문 탈출

    안하면 계속 반복해서 탐색하라고 나옴

 

 

 

 

 

ArraySearch02 - 문자열 비교 인덱스 위치 찾기

1. 문자열로 배열 선언, 생성, 초기화

2. 찾을 값 입력 -> name 변수 생성

3. for 반복문

    int i = 0; i < arr.length; i++

    i는 결국 인덱스 값임

4. if 조건문

    rr[i] = 배열의 값이 name값과 같으면

    몇번째에 있는지 알려줘라

    문자열 비교 - 변수.equals( "       " )

5. 위치 index 변수 생성, 없으면 -1로 나타냄

 

 

 

 

 

 

 

 

 


2진 탐색

전제조건: 순차적으로 중복 되지 않는 배열 (나열되어 있어야 함)

ArraySearch03 - 이진탐색으로

배열 값 비교 인덱스 위치 찾기

중간값을 계속 바꾸면서 같은지, 큰지, 작은지

1. 배열 선언, 생성, 초기화 후  num 입력받음

2. 이진탐색은 절반부터 나눠서 찾는 과정이므로

    low, high 변수 생성

    low = 0 인덱스 0부터~

    high = arr.length-1 인덱스 마지막 값 = 길이-1

3. while 반복문

    mid 변수 생성 = (low+high) / 2

4. if 조건문1

    num == arr[mid] 입력값이 중간 배열값과 같으면

    인덱스 위치 출력하고 break로 빠져나오기

5. if 조건문2

    num > arr[mid] 입력값이 중간 배열값보다 크면

    low -> mid+1 낮은 값을 인덱스+1로 올려서 중간값 다시 찾기

6. if 조건문3

    num < arr[mid] 입력값이 중간 배열값보다 작으면

    high -> mid-1 큰 값을 인덱스-1로 내려서 중간값 다시 찾기

7. while 반복문안에서 다 색인 했는데 없으면

    if 조건문 low > high 일때 = 나올 수 없을 때

    "찾는 값 없음" 출력

 

 

 

 

 

arrays.sort(); - 퀵정렬(오름차순)

// 내림차순
Arrays.sort(arr, Collections.reverseOrder());

1. for 반복문 조건 세우기 ( j = i+1 )

i j i j i j i j
0 1 1 2 2 3 3 4
2 3 4 5
3 4 5 6
4 5 6 4 5
5 6     6
6         5 6

 

2. if 조건문

    배열의 swap -> temp 임시 변수 생성

    i, j 비교해서 i가 더 크면 변수값 체인지

    기본 오름차순인데 내림차순을 하고싶으면 arr[ i ] < arr[ j ] 하면 됨


오늘 하루

더보기

기억에 남는 부분

- break는 반복문 하나를 빠져나옴 (if문 제외)

- array에서 위치값을 나타낼 때 index변수 생성해서 조건이 맞으면 i를 index값에 넣고 출력
  (아직 어디서 제대로 사용하는지 모름) 

 

어려운 부분

- continue 사용 방법, return 전혀 이해x

- 이진탐색!!!!!!!!!!!!!! 작동 원리 생각해보고 for 반복문 조건 잘 세우기

 

문제 해결 부분

- Quiz17 무한루프로 못 풀고, 응용해서 Quiz18 해결

- 탈출문(break, continue, return), 무한루프 while(for)

 

728x90
profile

원지의 개발

@원지다

250x250