새소식

Java/제대로 파는 자바

[제대로 파는 자바 (Java)-by 얄코] for & for-each

  • -

해당 게시물은 [제대로 파는 자바 (Java) - by 얄코]를 수강한 내용을 바탕으로 작성하였습니다.

 

 

 

 

  • 실행 과정
    1. 루프 안에서 사용할 변수 초기화
    2. 루프를 실행하기 위한 조건 확인
    3. 조건을 충족시 실행할 내용
    4. 각 루프가 끝날때마다 이행할 내용
  • 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);
    }
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.