728x90
제어문에는 조건문, 반복문 등이 있습니다.
1.조건문
1) if-else문
if-else문은 조건의 참과 거짓을 판단하여 실행문을 실행할지 말지를 결정하는 제어문입니다.
boolean result = true;
int a = 10, b = 20;
int c = 15;
// if : 괄호 안의 값이 true면 다음 명령 실행
// 조건문 다음에 실행해야할 문장이 하나라면 {}를 사용하지 않아도 됨
if (result) System.out.println("참"); //출력: 참
if (!result) System.out.println("거짓");
// 실행할 명령이 한 줄 이상일 경우 블록 사용
if (c >= a && c <= b) {
System.out.println(c+"는"+a+"보다 크거나 같다"); //출력: 15는10보다 크거나 같다
System.out.println(c+"는"+b+"보다 작거나 같다"); //출력: 15는20보다 작거나 같다
}
System.out.println("---------------------------");
//else는 if 조건문이 거짓일 때 실행되는 부분 -> 여러줄인 경우 실행블록을 넣어야 함
if(!result) System.out.println("참이다"); //조건이 거짓이므로 출력되지 않음
else System.out.println("거짓이다."); //출력: 거짓이다.
System.out.println("---------------------------");
//조건문이 여러개일 경우 else if 사용(여러번 사용 가능) -> 여러 줄인 경우 실행블록을 넣어야 함
if(!result) System.out.println("참이다"); //조건이 false이므로 출력되지 않음
else if (a < b) System.out.println(a+"가"+b+"보다 작다"); //출력: 10가20보다 작다
else System.out.println("위 조건 모두 틀림"); //위 조건중 하나가 true이므로 출력되지 않음
System.out.println("---------------------------");
if(!result) System.out.println("참이다"); //조건이 false이므로 출력되지 않음
else if (a > b) System.out.println(a+"가"+b+"보다 작다"); //조건이 false이므로 출력되지 않음
else System.out.println("위 조건 모두 틀림"); //출력: 위 조건 모두 틀림 -> 위 조건 모두 false이므로 출력됨
System.out.println("===============================");
//실행블록 안에서도 조건문 사용가능
boolean aa = true;
boolean bb = false;
boolean cc = true;
boolean dd = false;
boolean ee = false;
int ff = 2;
// 중첩 사용
if (aa) {
// 블록 내에서만 사용되는 변수 (이후 스코프에서 배움)
String str1 = "";
// 필요에 따라 적절한 것 사용
str1 = bb ? "라떼" : "아메리카노"; //bb가 거짓이므로 str1 = "아메리카노"
if (cc) str1 = "아이스 " + str1; //cc가 참이므로 str1 = "아이스 " + "아메리카노"
if (!dd) str1 += " 안단티노"; //!dd가 참이므로 str1 = "아이스 아메리카노" + " 안단티노"
System.out.printf("저는 %s 할게요%n", str1); //출력: 저는 아이스 아메리카노 안단티노 할게요
} else { //aa가 거짓일 경우 출력되는 부분 -> aa가 참이므로 아래 조건문들은 참이든 거짓이든 실행되지 않음
String str1 = "";
if (!ee || ff > 3) {
str1 = "No";
} else {
str1 = "refuse";
}
System.out.println(str1);
}
2) switch문
switch문은 조건의 값의 경우의 수를 정해 놓고 조건의 값과 일치하는 부분을 실행하는 제어문입니다.
byte fingersOut = 5;
// switch : 괄호 안에 기준이 될 변수를 받음
// 가능한 자료형: byte, short, int, char, String, enum
switch (fingersOut) {
// case : 기준에 일치하는 case로 바로 이동
// break : switch문 실행을 종료
// default: 해당하는 case가 없을 때 - 마지막에 작성
case 2:
System.out.println("가위");
break;
case 0:
System.out.println("바위");
break;
case 5:
System.out.println("보"); //출력 -> break를 걸지 않으면 일치하는 조건 아래 문장이 모두 실행됨
break;
default:
System.out.println("무효");
}
//문자열을 이용한 스위치문 예제
String direction = "north";
String dirKor;
switch (direction) {
case "north":
dirKor = "북";
break;
case "south":
dirKor = "남";
break;
case "east":
dirKor = "동";
break;
case "west":
dirKor = "서";
break;
default:
dirKor = null;
}
System.out.println(
dirKor != null ? dirKor : "무효"
); //출력: 북
//분기 확인
byte month = 1;
byte season;
switch (month) {
case 1: case 2: case 3: //case 1,2,3에는 똑같은 값이 실행 -> 사이에 break가 걸려있지 않기 때문에
season = 1;
break;
case 4: case 5: case 6: //case 4,5,6에 똑같은 값이 실행
season = 2;
break;
case 7: case 8: case 9: //case 7,8,9에 똑같은 값이 실행
season = 3;
break;
case 10: case 11: case 12: //case 10,11,12에 똑같은 값이 실행
season = 4;
break;
default:
season = 0;
}
System.out.println(
season > 0
? "지금은 %d분기입니다.".formatted(season)
: "무효한 월입니다."
); //출력: 지금은 1분기입니다.
byte startMonth = 1;
String holidays = "";
switch (startMonth) {
case 1:
holidays += "설날, ";
case 2:
case 3:
holidays += "3·1절, ";
break;
case 4:
case 5:
holidays += "어린이날, ";
case 6:
holidays += "현충일, ";
break;
case 7:
case 8:
holidays += "광복절, ";
case 9:
holidays += "추석, ";
break;
case 10:
holidays += "한글날, ";
case 11:
case 12:
holidays += "크리스마스, ";
break;
default:
holidays = null; // 휴일이 없는 분기와 구분
}
String result = holidays == null
? "(잘못된 월입니다)"
: "분기 내 휴일: " + holidays
.substring(0, holidays.lastIndexOf(", "));
System.out.println(result); //출력: 분기 내 휴일: 설날, 3·1절
2. 반복문
1) for문
for문의 기본 사용법은 아래와 같습니다.
for(타입 변수=초기화;범위;증감){
//실행문
}
예제를 통해 확인해보겠습니다.
for (int i = 0; i < 10; i++) {
System.out.print(i+" "); //출력: 0 1 2 3 4 5 6 7 8 9
}
System.out.println("\n--------------------");
// 루프 블록 안에서 변수값을 바꾸는 것으로 4번 과정 대신 가능
for (int i = 0; i < 10;i+=2) {
System.out.print(i+" "); //출력: 0 2 4 6 8
}
System.out.println("\n---------------------");
//같은 결과를 아래처럼 할 수도 있음
for (int i = 0; i < 10;) {
System.out.print(i+" "); //출력: 0 2 4 6 8
i+=2;
}
System.out.println("\n---------------------");
//정수 타입이 아니라도 가능
for (double d = 123.45; d > 0; d -= 32.1) {
System.out.print(d+" "); //출력: 123.45 91.35 59.24999999999999 27.14999999999999
}
System.out.println("\n---------------------");
for (String s = ""; s.length() < 11; s += s.length()) {
System.out.print(s+" "); //출력: 0 01 012 0123 01234 012345 0123456 01234567 012345678 0123456789
}
System.out.println("\n---------------------");
// 쉼표로 구분하여 여럿 사용 가능
// 변수의 자료형은 한 종류만 가능 (혼용 안 됨)
for (byte a = 0, b = 10; a <= b;) {
System.out.printf("a: %d, b: %d%n", a++, b--);
//출력:
//a: 0, b: 10
//a: 1, b: 9
//a: 2, b: 8
//a: 3, b: 7
//a: 4, b: 6
//a: 5, b: 5
}
System.out.println("\n---------------------");
// 윷놀이 예제에 적용
String yuts = "도개걸윷모";
char yut = '모';
boolean isValid = false;
for (int i = 0; i <= yuts.indexOf(yut); i++) {
isValid = true;
System.out.println("앞으로");
//출력:
//앞으로
//앞으로
//앞으로
//앞으로
//앞으로
}
if (!isValid) System.out.println("무효");
// 4의 배수 차례로 10개 배열에 담기
int count = 10;
int[] multiOf4 = new int[count];
for (int i = 1, c = 0; c < count; i++) {
if (i % 4 == 0) {
multiOf4[c++] = i;
}
}
// 배열 순환 (기본적인 방법)
for (int i = 0; i < multiOf4.length; i++) {
System.out.print(multiOf4[i]+" "); //출력: 4 8 12 16 20 24 28 32 36 40
}
System.out.println("\n---------------------");
// 향상된 for문 또는 for-each문
for (int num : multiOf4) {
System.out.print(num+" "); //출력: 4 8 12 16 20 24 28 32 36 40
}
System.out.println("\n---------------------");
// 다중반복문 - 구구단
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.printf("%d X %d = %d ", i, j, i * j);
}
System.out.println(" ");
//출력:
//1 X 1 = 1 1 X 2 = 2 1 X 3 = 3 1 X 4 = 4 1 X 5 = 5 1 X 6 = 6 1 X 7 = 7 1 X 8 = 8 1 X 9 = 9
//2 X 1 = 2 2 X 2 = 4 2 X 3 = 6 2 X 4 = 8 2 X 5 = 10 2 X 6 = 12 2 X 7 = 14 2 X 8 = 16 2 X 9 = 18
//3 X 1 = 3 3 X 2 = 6 3 X 3 = 9 3 X 4 = 12 3 X 5 = 15 3 X 6 = 18 3 X 7 = 21 3 X 8 = 24 3 X 9 = 27
//4 X 1 = 4 4 X 2 = 8 4 X 3 = 12 4 X 4 = 16 4 X 5 = 20 4 X 6 = 24 4 X 7 = 28 4 X 8 = 32 4 X 9 = 36
//5 X 1 = 5 5 X 2 = 10 5 X 3 = 15 5 X 4 = 20 5 X 5 = 25 5 X 6 = 30 5 X 7 = 35 5 X 8 = 40 5 X 9 = 45
//6 X 1 = 6 6 X 2 = 12 6 X 3 = 18 6 X 4 = 24 6 X 5 = 30 6 X 6 = 36 6 X 7 = 42 6 X 8 = 48 6 X 9 = 54
//7 X 1 = 7 7 X 2 = 14 7 X 3 = 21 7 X 4 = 28 7 X 5 = 35 7 X 6 = 42 7 X 7 = 49 7 X 8 = 56 7 X 9 = 63
//8 X 1 = 8 8 X 2 = 16 8 X 3 = 24 8 X 4 = 32 8 X 5 = 40 8 X 6 = 48 8 X 7 = 56 8 X 8 = 64 8 X 9 = 72
//9 X 1 = 9 9 X 2 = 18 9 X 3 = 27 9 X 4 = 36 9 X 5 = 45 9 X 6 = 54 9 X 7 = 63 9 X 8 = 72 9 X 9 = 81
}
System.out.println("\n---------------------");
String[][] quotesInLangs = {
{
"아조씨",
"누군데요",
"머하세요",
},
{
"나는야",
"하늘을 하는",
"슈퍼맨",
},
};
String result = "";
for (String[] quotes : quotesInLangs) {
for (String quote : quotes) {
result += quote + " ";
}
result = result.trim().concat("\n"); //양 끝의 공백을 자르고 문자열 연결
}
System.out.println(result);
//출력:
//아조씨 누군데요 머하세요
//나는야 하늘을 하는 슈퍼맨
System.out.println("\n---------------------");
for (int i = 0; i < 100; i++) {
// continue : 한 루프만 건너뜀
if (i % 3 == 0) continue; //3의 배수는 건너뜀
// break : 반복을 종료
if (i == 10) break; //10일때 종료
System.out.print(i+" "); //출력: 1 2 4 5 7 8
}
System.out.println("\n---------------------");
// label : 중첩 루프에서 어느쪽을 continue, break 할 지 구분
outer: //외부 라벨명
for (int i = 0; i < 10; i++) {
inner: //내부 라벨명
for (int j = 0; j < 10; j++) {
if (j % 2 == 0) continue inner; //inner 라벨 continue
if (i * j >= 30) continue outer; //outer 라벨 continue
if (j > 8) break inner; //inner 라벨 break
if (i - j > 7) break outer; //outer 라벨 break
System.out.printf("i: %d, j: %d%n", i, j);
//출력:
//i: 0, j: 1
//i: 0, j: 3
//i: 0, j: 5
//i: 0, j: 7
//i: 1, j: 1
//i: 1, j: 3
//i: 1, j: 5
//i: 1, j: 7
//i: 2, j: 1
//i: 2, j: 3
//i: 2, j: 5
//i: 2, j: 7
//i: 3, j: 1
//i: 3, j: 3
//i: 3, j: 5
//i: 3, j: 7
//i: 4, j: 1
//i: 4, j: 3
//i: 4, j: 5
//i: 4, j: 7
//i: 5, j: 1
//i: 5, j: 3
//i: 5, j: 5
//i: 6, j: 1
//i: 6, j: 3
//i: 7, j: 1
//i: 7, j: 3
//i: 8, j: 1
//i: 8, j: 3
}
}
2) while문
while문의 사용법은 아래와 같습니다.
while(조건문){
//실행문
}
while문에서는 조건문이 true일때 실행됩니다. 따라서 while문을 종료하려면 조건문을 false로 만드는 코드가 추가되어야합니다.
또한 while문의 이러한 특성때문에 무한히 반복되는 코드에서 사용하기도 합니다.
기본예제는 아래와 같습니다.
int i = 0;
// while 문의 괄호에는 조건문이 들어감
while (i < 10) {
System.out.print(i++); //출력:0123456789
}
3의 배수만 출력하는 예제
int i = 1;
while (true) {
int c = i++;
if (c == 100) break;
if (c % 3 != 0) continue;
System.out.println(c); //3의 배수만 출력
}
3) do-while문
do-while문은 while문과 다르게 먼저 실행하고 조건문을 확인합니다.
//조건문이 거짓이지만 먼저 출력되고 조건문 확인
do {
System.out.println("do"); //먼저 실행되므로 출력됨
} while (false); //조건문이 거짓이므로 반복문이 종료됨
System.out.println("종료"); //출력됨
System.out.println("---------------");
int i = 0;
do {
System.out.print(i+" "); //출력: 0 1 2 3 4 5 6 7 8 9
i++;
} while (i < 10);
System.out.println();
System.out.println("반복문 종료");
'JAVA Programming > Java' 카테고리의 다른 글
[JAVA] 키보드 입력 받기(Scanner) (0) | 2024.07.14 |
---|---|
[JAVA] 메소드 (0) | 2024.07.10 |
[JAVA] 타입 추론 (0) | 2024.07.09 |
[JAVA] 배열 (0) | 2024.07.09 |
[JAVA] 문자열 메서드 (0) | 2024.07.02 |