Java 3-3) break문 / switch, for, while문에서 사용하기
- break == 탈출 escape == loop를 멈춘다
- switch, for, while, do while문과 같이 씀
// switch문에서 break
switch (variable) {
case value:
processing
break;
}
// for문에서 break
for (int i = 0; i < 100; i++){
if (조건) {
break; ← 조건이 참일 때 loop를 멈추고 싶다면
}
}
// while문에서 break
w = 0;
while (w < 100) {
if (조건) {
break;
}
w++;
}
* break 예시
// for문에서 break
for(int i = 0; i < 10; i++) {
System.out.println("for loop " + i);
if(i == 5) {
break;
}
}
- i가 5일 때, 출력이 되고 나서 if문 발동돼서 break
- i = 5가 출력되지 않고 break 되려면 출력문을 if문 뒤에 작성
// for문 배열변수에서 break
int array[] = {1, 4, -7, 3, 8};
for(int i = 0; i < array.length; i++) {
System.out.println("array[" + i + "] = " + array[i]);
if(array[i] < 0) {
break;
}
}
- array[2]까지 출력되고 array[2]가 음수이기 때문에 break
// while문에서 break
Scanner sc = new Scanner(System.in);
int number;
while(true) {
System.out.print("숫자를 입력(>0) = ");
number = sc.nextInt();
if(number > 0) {
System.out.println("입력한 수 = " + number);
break;
}
System.out.println("양수를 입력해주세요");
}
- 정수를 입력받아 입력받은 수를 출력하는 코드
- if문) 0보다 큰 수가 입력되면 → 입력 받은 수가 출력되고 → break
- while문) 음수가 입력되면 → "양수를 입력해주세요"가 출력되면서 → 다시 while문 반복 (항상 true인 조건)
- 출력값을 봤을 때, 음수가 입력되면 다시 입력받게끔 나오고, 양수를 입력했을 땐 입력한 수가 나오고 끝나는 것을 알 수 있다.
// 이중 for문 탈출
for (int i = 0; i < 10; i++) {
System.out.println("i = " + i);
for (int j = 0; j < 8; j++) {
System.out.println("\tj = " + j);
if(i == 5 && j == 3) {
break; // loop 하나당 break 하나만 적용 (안쪽 for문만 탈출)
}
}
}
- 안쪽 for문에만 break를 적용시켰기 때문에 i = 5, j = 3까지 출력되고 break된 후 바깥 for문부터 다시 출력된다.
for (int i = 0; i < 10; i++) {
System.out.println("i = " + i);
for (int j = 0; j < 8; j++) {
System.out.println("\tj = " + j);
if(i == 5 && j == 3) {
break; // loop 하나당 break 하나만 적용 (안쪽 for문만 탈출)
}
} if(i == 5) {
break; // 바깥 for문에도 break 적용
}
}
- 나는 바깥쪽 for문도 if문을 이용해 break를 걸었다. 그래서 i = 5, j = 3 이후는 값이 출력되지 않았다!
- 아래부터는 강사님이 알려주신 이중for문 탈출법 2가지
// 이중 for문 두가지 다 탈출하는 법
// 1. loop문의 개수에 맞게 break 설정
boolean b = false;
for (int i = 0; i < 10; i++) {
System.out.println("i = " + i);
for (int j = 0; j < 8; j++) {
System.out.println("\tj = " + j);
if(i == 5 && j == 3) {
b = true;
}
if(b == true) {
break;
}
}
if(b == true) {
break;
}
}
- boolean 자료형을 이용한 if문으로 if문의 조건이 성립되면 변수b가 true가 되고 그럼 break가 작동하고, 바깥의 for문에도 마찬가지로 if문을 이용해 break를 작동시킨다.
- 내가 푼 방식과 거의 흡사하다.
- 이때 변수 b의 값을 확인해보면 true로 출력된다.
// 2. break를 세팅
getout:for (int i = 0; i < 10; i++) {
System.out.println("i = " + i);
for (int j = 0; j < 6; j++) {
System.out.println("\tj = " + j);
if(i == 2 && j == 3) {
break getout; // getout 걸어놓은 부분도 같이 탈출됨
}
}
}
- 바깥쪽 for문 앞에 getout을 걸어줘서 안쪽 for에 건 break가 바깥에도 같이 적용됨
- getout부분은 사용자 지정 : 적는 사람 마음대로
- 1번보다 훨씬 간결하게 표현가능하다.