탈출문
- 실행 순서를 지정된 곳으로 이동시키는 문장
- 반복문 또는 블록구조에서 빠져 나올 때 사용
- 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)
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] String 클래스, 문자열 자르기(subString, split, toCharArray) (0) | 2022.09.30 |
---|---|
[Java] Array insert, update, delete (배열의 삽입, 수정, 삭제) (0) | 2022.09.29 |
[Java] for, 중복 for, 향상된 for(배열 담기) (0) | 2022.09.27 |
[Java] 반복문(while, do~while, for) 02 + array (0) | 2022.09.26 |
[Java] 반복문(while) 01 (0) | 2022.09.23 |