해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.
실행 과정
루프 안에서 사용할 변수 초기화
루프를 실행하기 위한 조건 확인
조건을 충족시 실행할 내용
각 루프가 끝날때마다 이행할 내용
1번 이후 2를 충족할 동안 2~4 반복
변수명은 원하는대로 사용 가능
일반적으로 기본형에는 i 를 많이 사용 - 문맥에 따라 index를 뜻함
// 루프 블록 안에서 변수값을 바꾸는 것으로 4번 과정 대신 가능
for (int i = 0; i < 10;) {
System.out.println(i);
i += 2;
}
for (double d = 123.45; d > 0; d -= 32.1) {
System.out.println(d);
}
for (String s = ""; s.length() < 11; s += s.length()) {
System.out.println(s);
}
// 💡 쉼표로 구분하여 여럿 사용 가능
// ⚠️ 변수의 자료형은 한 종류만 가능 (혼용 안 됨)
for (byte a = 0, b = 10; a <= b;) {
System.out.printf("a: %d, b: %d%n", a++, b--);
}
// 윷놀이 예제에 적용
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("무효");
무한루프
※무한루프는 프로그램을 정지시킴
// 종료조건이 없는 for 루프
for (;;) {
System.out.println("영원히");
}
// System.out.println("닿지 않아"); // ⚠️ 실행되지 않음
// 종료조건을 만족시키지 못하는 무한루프
for (int i = 0; i < 10; i++) {
System.out.println("그래도");
i--;
}
// 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.println(multiOf4[i]);
}
▶ for each
배열의 특정 개수만 사용할 때는 for 문, 전부 사용할 때는 foreach 문
(※ ⭐️ IntelliJ IDEA 단축어 :foreach)
// 💡 for each 문법 - 배열이나 이후 배울 콜랙션 등에 사용
for (int num : multiOf4) {
System.out.println(num);
}
int sumOfArray = 0;
for (int num : multiOf4) {
sumOfArray += num;
}
for (String s : "호롤롤로".split("")) {
System.out.println(s);
}
중첩 루프
// 구구단 예제
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++) {
System.out.printf("%d X %d = %2d%n", i, j, i * j);
}
}
String[][] quotesInLangs = {
{
"I am vengeance.",
"I am night.",
"I am Batman.",
},
{
"나는 복수를 하지.",
"나는 밤이지.",
"나는 배트맨이지.",
},
};
String result = "";
for (String[] quotes : quotesInLangs) {
for (String quote : quotes) {
result += quote + " "; // 🔴
}
result = result.trim().concat("\n");
}
System.out.println(result);
continue와 break
▶ continue : 한 루프만 건너뜀
▶ break : 블록 전체를 종료
for (int i = 0; i < 100; i++) {
// 💡 continue : 한 루프만 건너뜀
if (i % 3 == 0) continue;
// 💡 break : 블록 전체를 종료
if (i == 10) break;
System.out.println(i);
}
// ⭐️ 무한루프 탈출에 사용 가능
for (;;) { // 다음 강의 while을 더 많이 사용
str += "롤";
System.out.println(str);
if (str.length() == 100) break;
}
str += "로";
System.out.println(str);
▶ label : 중첩 루프에서 어느쪽을 continue,break 할지 구분
(안쪽 반복문에서 바깥쪽 반복문을 continue/break할 필요가 있을 때)
// 💡 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;
if (i * j >= 30) continue outer;
if (j > 8) break inner;
if (i - j > 7) break outer;
System.out.printf("i: %d, j: %d%n", i, j);
}
}