본문 바로가기
개발일지

개발일지 8일차 -for문의 응용-

by 태운콩즙 2023. 12. 5.
728x90
반응형

오늘은 지난 시간에 배운 for 문을 응용하는 수업을 진행하였다

 

우선 for문을 활용한 기초 예문은

 

<예문1>

public class Ex02_ForEx {
    public static void main(String[] args) {
        //1~10까지 순서대로 출력
        
        // 2 4 6 8 10 출력
        
        // 5 4 3 2 1 출력
        int i = 0;
        for (i = 0; i <= 10; i++ ){
            System.out.println("i = " + i);
        }for (i = 2; i <= 10; i+=2 ){
            System.out.println("i = " + i);
        }for (i =5; i>=1; i--){
            System.out.println("i = " + i);
        }
        
    }
}

 

for문 안에 조건을 만족하게 하여 출력을 하면 지정한 범위중에 원하는 것만 출력하는것도 가능하다

 

<예문 2>

package ch06_for;

public class Ex03_forEx {
    public static void main(String[] args) {
        /**
         * 1부터 10까지의 합계를 출력
         */
        int sum = 0;
        for (int i = 1; i<=10; i++){
            sum= sum+i;

            System.out.println("i = " + i);
            System.out.println("sum = " + sum );
        }
        System.out.println("for문종료후 sum= " + sum);
    }
}

예제 2 는 for문에 조건을 넣어서 1부터 10까지의 합을 출력을 한것이다

전역 변수 sum을 선언 한후 지역변수 i 에 범위를 지정하고 두 변수의 합을 출력하면

"C:\Program Files\Amazon Corretto\jdk17.0.9_8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.5\lib\idea_rt.jar=51988:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.5\bin" -Dfile.encoding=UTF-8 -classpath C:\Development\Java\gitex\Java_class\out\production\Java_class ch06_for.Ex03_forEx
i = 1
sum = 1
i = 2
sum = 3
i = 3
sum = 6
i = 4
sum = 10
i = 5
sum = 15
i = 6
sum = 21
i = 7
sum = 28
i = 8
sum = 36
i = 9
sum = 45
i = 10
sum = 55
for문종료후 sum= 55

Process finished with exit code 0

위 처럼 i값과 sum+i 값이 나오게 된다

하지만 위에 예문처럼 실행을 하게되면 출력되는 값이 너무 길어지게 되어 보기엔 좋지 않다

 

그럴땐 for문 안에 if문을 넣어서 실행을 하면 된다

<예문3>

package ch06_for;

public class Ex04_forEx {
    public static void main(String[] args) {
        /**
         * 1부터 10까지의 합계를 아래와 같이 출력
         * 출력예
         * 1+2+3+4+5+6+7+8+9+10=55
         *
         */
        int i =0;
        int sum = 0;
        for (i = 1; i <=10; i++){
            sum += i;
            if(i<10){
                System.out.print(i+"+");
            }else {
                System.out.print(i + "=");

            }
        }

        System.out.println(sum);

        
    }
}

 

예문2 와 다른점은 

if문으로 10보다 작은 정수가 오면 +를 출력하고 그 외의 정수가 오면 = 이 출력되게 만들어서 식을 한눈에 볼수있게 바꾸어주었다

 

<예문4>

package ch06_for;

import java.util.Scanner;

public class Ex05_forEx {
    public static void main(String[] args) {
        /** 두 개의 정수를 입력 받아서 시작값부터 끝값까지의 합계 출력
         * 입력 예
         * 시작값 110
         * 끝값 555
         * 출력 예
         * 110붙터 555까지의 합계는 000입니다
         */
        Scanner scanner =new Scanner(System.in);


        int sum = 0;

        System.out.print("시작값= ");
        int num1 = scanner.nextInt();
        System.out.print("끝값= ");
        int num2 = scanner.nextInt();

        for (int i =num1; i<=num2; i++){
            sum += i;
        }
        System.out.print("110부터 555까지의 합계는" +sum + "입니다");

    }
}

 

예문 4는 Scanner을 사용하여 정수값을 2개 넣어서 시작값 과 끝값 까지의 합계를 구하였다

 

예문 2, 예문 3, 과의 차이는 전역변수 sum은 동일 하지만 정수를 입력해서 구하는것 이기 때문에 조건식에서 num1과 sum2를 사용해 주었다

 

<예문 5>

package ch06_for;

public class Ex_06forEx {
    public static void main(String[] args) {
        /**
         * 1부터 100까지의 숫자중에서 3의 배수만 출력하고 합계도 구하기
         *
         */
        int sum=0;

        for (int i=0; i<=100; i++){
            if(i%3==0){
                sum+= i;
            }
        }
        System.out.println(sum);


    }
}

예문 5는  for문에서 범위 1~100까지 범위중에 if문을 사용하여 3의 배수끼리의 합을 출력한 내용이다

변수 i에 3을 나눠서 나머지가 0이 되는 수가 3의 배수이기때문에 i%3==0 이란 식을 사용하였다

 

-중첩 for문-

중첩 for문 이란 for문 안에 for문을 사용하여 출력을 하는방식이다

 

<기본 예시>

package ch06_for;

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

        /**
         * 중첩 for문
         *
         */

        System.out.println("바깥 for문 시작");
        for (int i= 1; i <= 2; i++){
            System.out.println("안쪽 for문 시작");
            for (int j = 1; j<=3; j++){
                System.out.print("j = " + j);
                System.out.println("      i = " +i);
            }
            System.out.println("안쪽 for문 종료");
        }
        System.out.println("바깥 for문 종료");
    }
   
}

중첩 for문은 밖에 있는 for문이 한번 실행 될때 마다 밖에 있는 for문이 실행 되는것이다

 

이걸 가장 쉽게 알아보는것이 구구단이다

 

<예문 6>

package ch06_for;

public class Ex_08ForEx {

    public static void main(String[] args) {
        for (int i = 2; i <= 9; i++) {//몇단
            System.out.println(i + "단");
            for (int j = 1; j <= 9; j++) {// 곱하는수 (1~9)
                System.out.print(i + "x" + j + "=" + (i * j) + "  ");
            }
                System.out.println();
        }

예문 6을 보게 되면 구구단은 2단~9단까지 실행을 하기위해 변수값을 2부터 9와 같거나작은수로 지정을 하였고

안쪽 for문으로 곱하는 수를 지정하였다

"C:\Program Files\Amazon Corretto\jdk17.0.9_8\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.5\lib\idea_rt.jar=52095:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.2.5\bin" -Dfile.encoding=UTF-8 -classpath C:\Development\Java\gitex\Java_class\out\production\Java_class ch06_for.Ex_08ForEx
2단
2x1=2  2x2=4  2x3=6  2x4=8  2x5=10  2x6=12  2x7=14  2x8=16  2x9=18  
3단
3x1=3  3x2=6  3x3=9  3x4=12  3x5=15  3x6=18  3x7=21  3x8=24  3x9=27  
4단
4x1=4  4x2=8  4x3=12  4x4=16  4x5=20  4x6=24  4x7=28  4x8=32  4x9=36  
5단
5x1=5  5x2=10  5x3=15  5x4=20  5x5=25  5x6=30  5x7=35  5x8=40  5x9=45  
6단
6x1=6  6x2=12  6x3=18  6x4=24  6x5=30  6x6=36  6x7=42  6x8=48  6x9=54  
7단
7x1=7  7x2=14  7x3=21  7x4=28  7x5=35  7x6=42  7x7=49  7x8=56  7x9=63  
8단
8x1=8  8x2=16  8x3=24  8x4=32  8x5=40  8x6=48  8x7=56  8x8=64  8x9=72  
9단
9x1=9  9x2=18  9x3=27  9x4=36  9x5=45  9x6=54  9x7=63  9x8=72  9x9=81

그럼 바깥 for문이 2가 실행 될때 안쪽 for문 1~9까지가 모두 실행이 되는것이다

 

<별찍기>

package ch06_for;

public class Ex11_forEx {
    public static void main(String[] args) {
        /** 별 찍기
         * 출력
         * *
         * **
         * ***
         * ****
         * *****
         *
         */
        for (int i = 1; i <= 5; i++) { // 줄수, 별을 출력할 횟수
            for (int j = 0; j < i; j++) { //별을 줄수 만큼 출력
                System.out.print("*");
            }
            System.out.println(); // 줄을 바꾸기 위한 용도
        }

    }
}

중첩 for문을 사용하여 만든 별찍기 이다

바깥 for문은 줄수

안쪽 for문은 별을 줄수만큼 출력 해주는 용도

바꿔 말하게 되면 바깥 for문이 실행이 한번 될때 마다 안쪽 for문이 실행이 되어서

*

**

***

****

*****

이런 모양이 나오게 된다

 

 

그렇다면 for문을 중첩으로 사용하여 2가지 값을 얻어야할때는 어떻게 해야할까?

 

<예문7>

        /** 4x + 5y = 60 을 만족하는 x,y 값을 출력
         * x , y 는 1이상 10 이하인 정수
         *
         * 출력(정답)
         * 5, 8 , 10, 4
         */
        int num1 = 4;
        int num2 = 5;
        int sum = 60;
        int x = 1;
        int y = 1;
        for (x = 1; x <= 10; x++) {
            for (y = 1; y <= 10; y++) {
                if((num1*x)+(num2*y)==sum){
                System.out.println("x = " +x + "y = "+ y);
          }
        }
    }
}
}

 

예문 7을 보면 4x + 5y =60 을 만족하는 x,y 값을 얻어야한다

그렇다면 바깥 for문에 x값에 조건을 입력하고 안쪽 for문에 y값의 조건을 넣은 후

if문으로 4x + 5y = 60이 참이 될때 x값과 y값을 출력 해달라고 하였다

 

<예문8>

 

public class Ex10_forEx {
    public static void main(String[] args) {
        /** 정수 하나를 입력 받고
         * 1부터 입력받은 정수까지의 정수 중에서
         * 2의 배수 3의 배수를 제외한 총 합 출력
         */
        Scanner scanner = new Scanner(System.in);
        int sum = 0;
        System.out.print("정수");
        int num1 = scanner.nextInt();
        for (int i = 1; i <= num1; i++) {
            for (i = 1; i <= num1; i++) {
                if (i % 2 != 0 && i % 3 != 0) {
                    sum += i;

                }
            }
            System.out.println("=" + sum);
        }
    }
}

앞전에서는 포함하는값을 더하는 식이였다면 예문 8에서는 제외한 나머지 값을 합한 값을 출력하였다

 

제외한 값을 구하는 연산은 지난 시간에 배운 NOT 연산을 사용하였다

 

 

728x90
반응형