육식하는야채의 개발일지
article thumbnail

for문

 

for문은 똑같은 실행문을 반복적으로 실행해야 할 경우가 많은 경우 사용한다.

1~10까지를 출력하는 반복작업일 때 코드를 효율적으로 작성하도록 해준다.

package chapter4_2;

public class ForPrintFrom1To10Example {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
    }
}
/* 실행결과
1
2
3
4
5
6
7
8
9
10
*/
for ( 초기화식 : 조건식: 증감식){
실행문
}

 

만약 초기화식이 필요 없는 경우에는 초기화식을 생략할 수 있다.

int i = 1;
for(; i<=100: i++){
}

 

1부터 100까지의 합을 구하는 경우 for문을 시작하기 전에  1~100까지 합한 수를 저장할 합계 변수 sum를 선언해야한다.

package chapter4_2;

public class ForSumFrom1To100Example {
    public static void main(String[] args) {
        int sum = 0; // 합계변수선언

        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("1 ~ 100 합 : " + sum);
    }
}
package chapter4_2;

public class ForPrintFrom1To100Example2 {
    public static void main(String[] args) {
        int sum = 0; // 합계변수

        int i = 0; // 루프카운터 변수
        for (i = 1; i <= 100; i++) {
            sum += i;
        }
		             // 루프카운터 변수
        System.out.println("1~" + (i - 1) + " 합 : " + sum);
        // i = 101이 되었을 때 이 코드가 실행되기 때문에 101-1을 해야한다.
    }
}

 

float 타입은 0.1을 정확하게 표현할 수 없기 때문에 원하는 대로 실행이 되지 않을 수 있다.

아래의 경우 루프카운터 변수 x에 더해지는 실제 값은 0.1보다 약간 크기 때문에 9번만 실행되는 모습을 볼 수 있다.

package chapter4_2;

public class ForFloatCounterExample {
    public static void main(String[] args) {
        for (float x = 0.1f; x <= 1.0f; x += 0.1f) {
            System.out.println(x);
        }
    }
}
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001

 

중첩 for문

 

for문 안에 다른 for문을 넣은 코드로 바깥쪽 for문을 한번 실행할 때

안 쪽 for문은 지정된 횟수만큼 반복해서 돌다가 다시 바깥쪽 for문으로 돌아간다.

 

아래는 구구단을 출력하는 코드이다.

package chapter4_2;

public class ForMultiplicationTableExample {
    public static void main(String[] args) {
        for (int m = 2; m <= 9; m++) { // 현재 몇단인지를 세는 for문
            System.out.println("*** " + m + "단 ***");
            for (int n = 1; n <= 9; n++) { // 구구단을 하는 for문
                System.out.println(m + " x " + n + " = " + (m * n));
            }
        }
    }
}
/* 실행결과
*** 2단 ***
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단 ***
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단 ***
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단 ***
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단 ***
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단 ***
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단 ***
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단 ***
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
*/

 

while문

 

for문이 정해진 횟수만큼 반복한다면, while문은 조건식이 true일 경우에 계속해서 반복한다.

조건식에는 비교 또는 논리 연산식이 주로 온다.

조건식이 false가 되면 반복을 멈추고 while문을 종료한다.

 

while문으로 1부터 10까지 출력하는 코드

package chapter4_2;

public class WhilePrintFrom1To10Example {
    public static void main(String[] args) {
        int i = 1;
        while (i <= 10) {
            System.out.println(i);
            i++;
        }
    }
}

 

1부터 100까지 합을 출력하는 코드

package chapter4_2;

public class WhileSumFrom1To100Example {
    public static void main(String[] args) {
        int sum = 0;

        int i = 1;

        while (i <= 100) { // i = 100까지 실행
            sum += i;
            i++;
        }
 // i = 101일 떄 출력코드 실행이기 때문에 i-1을 해주어야 100이 된다.
        System.out.println("1~" + (i - 1) + " 합 : " + sum);
    }
}

 

do while문

do-while문은 조건식에 의해 반복 실행한다는 점에서 while문과 동일하지만 do-while문은

불록 내부의 실행문을 우선 실행하고 실행결과에 따라서 반복할지 말지를 결정할 수있다.

 

do{

실행문; // 실행문의 결과가 조건식을 만족하여 true인 경우 실행문을 반복실행한다.

}while(조건식);
// 조건식을 만족하지 않아 false가 된 경우 빠져나온다.

break문

 

break문은 반복문인 for문, while문, do-while문을 중지할 때 사용된다.

 

while문을 사용해서 주사위 번호 중 하나를 반복적으로 무작위로 뽑되, 6이 나오면 while문을 종료하는 코드다.

package chapter4_2;

public class BreakExample {
    public static void main(String[] args) {
        while (true) {
            int num = (int) (Math.random() * 6) + 1;
            System.out.println(num);
            if (num == 6) {
                break;
            }
        }
        System.out.println("프로그램 종료");
    }
}

 

만약 반복문이 중첩되어 있는 경우 break문은 가장 가까운 반복문만 종료하고 바깥쪽 반복문은 종료하지 않는다.

바깥쪽 반복문까지 종료시키려면

바깥쪽 반복문에 이름(라벨)을 붙이고

break 이름; 을 사용하면 된다.

 

아래는 바깥쪽 for문은 'A'~'Z'까지 반복하고 중첩된 for문은 'a'~'z'까지 반복하는데,

중첩된 for문에서 lower변수가 'g'를 갖게 되면

for문까지 빠져나오도록 만든 코드이다.

package chapter4_2;

public class BreakOutterExample {
    public static void main(String[] args) {
        Outter : // 라벨이름
        for (char upper = 'A'; upper <= 'Z'; upper++) { // 앞의 대문자
            for (char lower = 'a'; lower <= 'z'; lower++) { // 앞의 소문자
                System.out.println(upper + "-" + lower);
                if (lower == 'g') {
                    break Outter; // 종료해야할 라벨
                   
                   // 라벨을 적지 않으면 안쪽 for문이 중지된다.
                }
            }
        }
        System.out.println("프로그램 실행 종료");

    }
}
/* 실행결과
A-a
A-b
A-c
A-d
A-e
A-f
A-g
프로그램 실행 종료
*/

 

continue문

 

continue문은 for, while문, do-while문에서만 사용된다.

블록 내부에서 continue문이 사용되면 for문의 증감식 또는 조건식으로 이동한다.

 

아래는 1부터 10까지의 수 중에서 짝수만 출력하는 코드이다.

package chapter4_2;

public class ContinueExample {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            if (i % 2 != 0) {
                continue; // 조건식을 만족하면 아래의 출력문을 출력하고 다시 조건식을 돌아온다.
            }
            System.out.println(i);
        }
    }
}

 

 

확인문제

 

1. 반복문의 종류를 적으시오

- for문 , while문, do-while문

 

2. for문을 이용해서 1부터 100까지 정수 중에서 3의 배수의 총합을 구하는 코드를 작성하시오.

package chapter4_2;

public class Quiz2 {
    public static void main(String[] args) {
        int sum = 0;

        for (int i = 1; i <= 100 ; i++) {
            if (i % 3 == 0) {
                sum += i;
            }
        }
        System.out.print("3의 배수 총합은 : " + sum);
    }
}
/* 실행결과
3의 배수 총 합은 : 1683
*/

 

3. while문과 Math.radom() 메소드를 이용해서 2개의 주사위를 던졌을 때 나오는 눈을 (눈1,눈2) 형태로 출력하고, 눈의 합이 5가 아니면 계속 주사위를 던지고, 눈의 합이 5이면 실행을 멈추는 코드를 작성하시오.

 

do-while 문을 쓴 코드

package chapter4_2;

public class Quiz3 {
        public static void main(String[] args) {

        int num1, num2;
        do {
            num1 = (int) (Math.random() * 6) + 1;
            num2 = (int) (Math.random() * 6) + 1;

            System.out.println("(" + num1 + ", " + num2 + ")");
        } while ((num1 + num2) != 5);
    }
}

while문을 쓴 코드

package chapter4_2;

public class Quiz3 {

    public static void main(String[] args) {
        while (true) {
            int num1 = (int) (Math.random() * 6) + 1;
            int num2 = (int) (Math.random() * 6) + 1;
            System.out.println("(" + num1 + ", " + num2 + ")");
            if ((num1 + num2) == 5) {
                break;
            }
        }
    }
}
/* 실행결과
(1, 6)
(1, 5)
(5, 4)
(1, 5)
(5, 3)
(6, 5)
(3, 4)
(1, 6)
(1, 3)
(6, 5)
(6, 6)
(3, 4)
(1, 4)
*/

4. 중첩 for문을 이용하여 방정식 4x + 5y = 60의 모든 해를 구해서 (x,y) 형태로 출력하시오. 단, x와 y는 10이하의 자연수이다.

package chapter4_2;

public class Quiz4 {
    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            for (int j = 1; j <= 10; j++) {
                if ((4 * i + 5 * j) == 60) {
                    System.out.println("(" + i + ", " + j + ")");;
                }
            }
        }
    }
}
/* 실행결과
(5, 8)
(10, 4)
*/

 

 

5. 중첩 for문을 이용해서 다음과 같이 *을 출력하는 코드를 작성해보시오

*
**
***
****

 

package chapter4_2;

public class Quiz5 {
    public static void main(String[] args) {

        for (int i = 1; i <=4 ; i++) { //행의 개수
            for (int j = 1; j <= i; j++) { //점의 개수
                System.out.print("*");
                if (j == i) { // 2열에 별이 2개가 찍히면 j는 2이기 때문에 넘어간다.
                    System.out.println();
                }
            }
        }
    }
}

 

6. for문을 이용해서 다음과 같이 *를 출력하는 코드를 작성해보시오.

     *
    ** 
   ***
 ****
package chapter4_2;

public class Quiz6 {
    public static void main(String[] args) {

        for (int i = 1; i <= 4; i++) { 
            for (int j = 4; j > 0; j--) { // 4번쨰에 점을 찍어야하기 때문에 4부터 시작
                if (i < j) { // 
                    System.out.print(" ");
                } else { // i와 j의 값이 같이질 때 별이 찍힌다.
                    System.out.print("*");
                }
            }
            System.out.println();
        }
    }
}

별을 거꾸로 찍는 코드이다. 

행이 4개이기 때문에 i는 1에서 4까지 증가한다.

4번을 띄고 점을 찍어야하기 때문에 j가 4에서 출발해서 i보다 크면 공백이 발생하고

i >= j가 되면 점을 찍게 된다.

i가 2로 넘어가게 되고 4 3은 i보다 크므로 공백을 2번 찍고

i => j가 되어 별을 찍고 i =2, j = 2
i = 2 j =1 이므로 별이 하나 더 찍힌다.

이 과정을 반복하면 위의 모양이 나오게 된다.

 

7. while문과 Scanner를 이용해서 키보드로 입력된 데이터로 예금, 출금, 조회, 종료 기능을 제공하는 코드를 작성해보시오

(Scanner의 nextLine()을 사용)

package chapter4_2;

import java.util.Scanner;

public class Quiz7 {
    public static void main(String[] args) {
        boolean run = true;
        int balance = 0; // 잔고
        Scanner in = new Scanner(System.in);


        while (run) { // true이기 때문에 항상 돌아간다.
            System.out.println("---------------------------------");
            System.out.println("1.예금 | 2.출금 | 3.잔고 | 4.종료");
            System.out.println("---------------------------------");
            System.out.print("선택> ");

            int menu = Integer.parseInt(in.nextLine()); 
            // nextLine은 문자열입력이기 때문에 int로 타입 변환을 해준다.

            switch (menu) {
                case 1 -> {
                    System.out.print("예금액> ");
                    balance += Integer.parseInt(in.nextLine());
                }
                case 2 -> {
                    System.out.print("출금액> ");
                    balance -= Integer.parseInt(in.nextLine());
                }
                case 3 -> {
                    System.out.print("잔고> ");
                    System.out.println(balance);
                }
                case 4 -> {
                    run = false; // false가 되면 while문을 빠져나간다.
                }
            }
            System.out.println("프로그램 종료");
        }
    }
}
/* 실행결과
---------------------------------
1.예금 | 2.출금 | 3.잔고 | 4.종료
---------------------------------
선택> 1
예금액> 40000
프로그램 종료
---------------------------------
1.예금 | 2.출금 | 3.잔고 | 4.종료
---------------------------------
선택> 2
출금액> 5000
프로그램 종료
---------------------------------
1.예금 | 2.출금 | 3.잔고 | 4.종료
---------------------------------
선택> 3
잔고> 35000
프로그램 종료
---------------------------------
1.예금 | 2.출금 | 3.잔고 | 4.종료
---------------------------------
선택> 4
프로그램 종료

Process finished with exit code 0
*/

 

'Java > 혼공자' 카테고리의 다른 글

JAVA) 조건문 iF문, Switch문  (0) 2023.04.22
JAVA) 연산자의 종류  (0) 2023.04.19
JAVA) 연산자와 연산식  (0) 2023.04.18
profile

육식하는야채의 개발일지

@육식하는야채

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!