[Java] 제어문
조건문
조건문은 조건을 제시한 뒤 만족하거나 불만족할 때의 분기를 제어한다. 조건식은 반드시 boolean
으로 평가되는 표현식이어야 한다.
if-then-else
if
~ else if
~ else
구간 중 만족하는 조건이 있다면 블록을 실행하고 if
문을 끝낸다. if
문 안에 if
문을 또 작성할 수 있다.
if (조건식) {
실행 블록
} else if (조건식) {
실행 블록
} else {
실행 블록
}
String str = "hello";
if ("hello".equals(str)) {
if (str.length() == 5) {
System.out.println("is 'hello'");
} else if (str.length() > 5) {
System.out.println("something wrong");
}
} else {
System.out.println("is not 'hello'");
}
switch-case
조건 1개로 제어 분기. 단, 조건은 int
로 변환 가능한 타입과 String
(JDK1.7 이상부터), enum
변수만 가능하다.
switch (조건) {
case 레이블1:
실행 블록;
break;
case 레이블2:
실행 블록;
break;
default: // 위에 열거된 case에 모두 해당되지 않으면 실행(if문의 else와 같다)
실행 블록;
break;
}
char character = 'A';
switch (character) {
case 'A':
System.out.println("A");
case 'B':
System.out.println("B");
break;
} // case 'A'에 break가 없어서 case 'B'도 같이 실행된다.
반복문
for loop
특정 실행 코드 블록을 원하는 횟수만큼 반복 제어
for (루프 헤더) {
루프 바디(실행 블록)
}
루프 헤더는 초기식; 조건식; 증감식;
구조로 작성하며, 루프 바디는 루프 헤더의 조건식이 true
로 평가될 때 실행하는 코드가 위치한다.
byte[] bytes = "한글나라".getBytes();
for (int i = 0; i < bytes.length; i++) {
System.out.println(bytes[i]);
}
for (;;) {
// some...one?
}
이렇게 하면 무한 루프가 된다.
향상된 for문 enhanced for loop statement
for (variable ele : locationEle) { // locationEle : 배열 또는 컬렉션
루프 바디(실행 블록)
}
int[] n = new int[] {40, 20, 10, 50, 30, 60, 35, 41, 23, 78} ;
// n의 배열 길이만큼 루프를 돌되 각 사이클마다 i에 n의 요소를 할당한다.
for (int i : n) {
System.out.println(i);
}
다음처럼 배열이나 컬렉션을 인라인으로 선언하여 사용하기도 한다.
for (String i : new String[] { "+", "-", "*", "/" }) {
// ...
}
while
조건식이 true
면 실행문을 반복한다.
while (조건식) {
실행문
}
int n = 1;
while (n < 11) { // 조건식
System.out.println(n);
++n;
}
아래는 무한 루프에서 탈출 분기를 설정하는 방법.
while (true) {
...
if (.....) {
break;
}
}
do…while
while
과 비슷하지만 실행문을 우선 실행 후 조건식을 평가한다.
do {
실행문
} while (조건식);
int n = 1;
do {
System.out.println(n);
++n;
} while (n<=10);
점프문
break
현재 위치에서 가장 가까운 switch 혹은 반복문을 탈출(중단)한다.
for (int i = 1; i < 11; i++) {
if (i == 5) {
break;
}
System.out.println(i);
} //1,2,3,4
continue
현재 자신이 속한 반복문 처음으로 되돌아간다. 증감식이 존재하면 한 번 수행한다.
for (int i = 1; i < 11; i++) {
if (i == 5) {
continue;
}
System.out.println(i);
}
// 1,2,3,4,6,7,8,9,10
label
제어문에 이름을 부여하고 지정한 제어문을 바로 탈출하거나 되돌아간다.
반복문에서 사용
switch
는 for
와 같은 방식이라 생략함.
// for문에 loop1 이라는 이름을 지정
loop1: for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if (j == 5) {
break loop1; // loop1 탈출
//break; // for j 탈출
//continue loop1; // loop1의 다음 반복(회차)으로 이동
//continue; // for j 의 다음 반복으로 이동
}
System.out.println(i + "*" + j + "=" + i * j);
} // end of for j
System.out.println();
} // end of loop1
다중 if
문에서 탈출하는 용도로 사용
int n = 10;
hello: if (n > 0) {
System.out.println("야");
if (n == 10) {
System.out.println("왜");
break hello; // hello if를 탈출
}
System.out.println("호 나는"); // 실행되지 않음
}
특정 블록을 탈출
char c = 'A';
yoohoo: {
if (c == 'A') {
System.out.println("유후~");
break yoohoo; // yoohoo 블록을 탈출
}
System.out.println("여기 오면 안 돼"); // 실행되지 않음
}