Java - 반복문 (1) for & for-each

민찬홍·2023년 9월 6일

Java

목록 보기
16/31
post-thumbnail

🧩 for

  • 주어진 조건이 충족되는 동안 특정 작업을 반복
			for (int i = 0; i < 10; i++) {
            System.out.println(i); // 🔴
        }

  • 실행 과정
    1. 루프 안에서 사용할 변수 초기화
    1. 루프를 실행하기 위한 조건 확인
    2. 조건을 충족시 실행할 내용
    3. 각 루프가 끝날때마다 이행할 내용
  • 1번 이후 2를 충족할 동안 2~4 반복
  • 변수명은 원하는대로 사용 가능
    • 일반적으로 기본형에는 i 를 많이 사용 - 문맥에 따라 index를 뜻함
		//  루프 블록 안에서 변수값을 바꾸는 것으로 4번 과정 대신 가능
        for (int i = 0; i < 10;) {
            System.out.println(i);
            i += 2;
        }
		System.out.println("\n- - - - -\n");				

		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);
        }
		System.out.println("\n- - - - -\n");				

		//  💡 쉼표로 구분하여 여럿 사용 가능
        //  ⚠️ 변수의 자료형은 한 종류만 가능 (혼용 안 됨)
        for (byte a = 0, b = 10; a <= b;) {
            System.out.printf("a: %d, b: %d%n", a++, b--);
      }

변수의 초기화는 외부에서도 가능하다. 위의 코드를 바꾸어보면

		int a = 0;
        double b = 10.0;
        
        for<( ; a<=b ; ) {
        	System.out.pringln("a: %d, b: %f%n",a++,b--);
        }
		System.out.println("\n- - - - -\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("무효");

🧩 무한 루프

		//  종료조건이 없는 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;
            }
        }
        
        // multiOff4 = [4,8,12,16,20,24,28,32,36,40]
			//  💡 배열 순환 (기본적인 방법)
			for (int i = 0; i < multiOf4.length; i++) {
            System.out.println(multiOf4[i]);
        }

🧩 for-each

아래 나오는 표현법을 잘 알아두어야 한다.

		System.out.println("\n- - - - -\n");

		//  💡 for each 문법 - 배열이나 이후 배울 콜랙션 등에 사용
        for (int num : multiOf4) {
            System.out.println(num);
        }
  • intellij 단축어 : foreach
		System.out.println("\n- - - - -\n");

		int sumOfArray = 0;
        for (int num : multiOf4) {
            sumOfArray += num;
        }
  • 배열의 특정 개수만 사용할 때는 for문, 전부 사용할 때는 foreach
		System.out.println("\n- - - - -\n");

		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);
            }
        }

for문에서 선언한 변수들은 그 for문 안에서만 사용할 수 있다. 예를 들어 위에 코드에서 jj가 선언된 for문이 아닌 i의 for문에서 출력하려고 하면 오류가 뜬다.

		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);
        
        
        /* result = " I am vengeance. I am night. I am Batman. 
                      나는 복수를 하지. 나는 밤이지. 나는 배트맨이지.*/

🧩 continue와 break

			for (int i = 0; i < 100; i++) {

            //  💡 continue : 한 루프만 건너뜀
            if (i % 3 == 0) continue;

            //  💡 break : 반복 전체를 종료
            if (i == 10) break;

            System.out.println(i);
        }
		System.out.println("\n- - - - -\n");

		String str = "호";

		//  ⭐️ 무한루프 탈출에 사용 가능
        for (;;) { // 다음 강의 while을 더 많이 사용
            str += "롤";
            System.out.println(str);
            if (str.length() == 100) break;
        }

        str += "로";
        System.out.println(str);
        
profile
백엔드 개발자를 꿈꿉니다

0개의 댓글