고래씌

[JAVA] 4-3. 제어문(for 문) 본문

JAVA/JAVA 기초

[JAVA] 4-3. 제어문(for 문)

고래씌 2023. 10. 5. 15:53

1. 반복문(for 문)

: 프로그램 흐름을 제어하는 제어문 중 하나

어떤 실행코드를 '반복'적으로 수행시켜줌

 

크게 두 종류로 나뉨(for, while(do-while))

 

[표현법]

for(초기식; 조건식; 증감식) {              // 세미콜론을 통해서 각각의 식을 구분하며 무조건 세미콜론 2개가 존재해야함

         반복적으로 실행시키고자 하는 코드;

}

 

- 초기식 : 반복문이 시작될 때 "초기에 딱 한번만 실행"되는 구문

               (반복문에서 사용할 변수를 선언 및 초기화 할 때 사용)

- 조건식 : 반복문이 수행될조건을 작성하는 구문

               조건식의 결과가 true면 반복문이 실행되고, false면 반복문을 멈추고 빠져나온다.

               (보통 초기식에 사용한 변수를 가지고 조건식을 작성)

- 증감식 : 반복문을 제어하는 변수값을 증감시키는 구문

               (보통 초기식에 사용한 변수를 가지고 증감식을 작성)

 

=> false가 나오면 for문을 빠져나온다!

 

★ 매번 조건식의 조건검사 결과값을 가지고 조건이 true일 경우만 반복해서 실행한다.

★ 알아둘 것 : for문 안에 초기식, 조건식, 증감식 각각 생략이 가능하긴 함. 단, 반드시 ;은 작성해줘야한다.

 

※ for(;;) {    // 초기식, 조건식, 증감식이 없더라도 문법적인 오류는 아님. 다만 무한반복으로 실행된다.

}

public void method2() {
    // 1~5까지 순차적으로 출력
    // 1 2 3 4 5
    // i값이 1에서부터 6보다 작을대까지 1씩 증가시키면서 반복 수행

    for(int i=1; i<6; i++) {   // 1 2 3 4 5 6(false)
        System.out.print(i+" ");
    }

    System.out.println();   // 줄바꿈

    // 5 4 3 2 1
    for(int i=5; i>0; i--) {
        System.out.print(i+" ");
    }
}
public void method3() {
    // i값이 1에서부터 10사이의 홀수만 출력
    // 1 3 5 7 9

    for(int i=1; i<=10; i+=2) {
        System.out.print(i+" ");
    }

    System.out.println();

    for(int i=1; i<=10; i++) {
        if(i%2 == 1) {
            System.out.print(i+ " ");
        }
    }
}
public void method4() {
    // 1 2 3 4 5 6 7 8 9 10

    for(int i=0; i<=9; i++) {
        System.out.print(i+ 1 +" ");
    }
}
public void method5() {
    // 1~10까지의 총 합계

    // 방법 1.
    // int sum = 1+2+3+4+5+..+10;

    // 방법 2.	
    int sum = 0;
    for(int i=1; i<=10; i++) {
        sum += i;
    }
    System.out.println("1부터 10까지의 총 합계? " + sum);  // 55
}
public void method6() {
    // 1에서부터 사용자가 입력한 숫자끼리의 모든 값을 더해서 출력해보기

    Scanner sc = new Scanner(System.in);
    System.out.print("정수 입력 : ");
    int num = sc.nextInt();

    int sum = 0;
    for(int i=1; i<=num;) {     // 증감식을 생략하는 케이스!!!
        sum += i++;
    }
    System.out.println("1부터 " + num + "가지의 총 합계 : " + sum);
}

2. 랜덤값

1) java.lang.Math 클래스 

java.lang.Math 클래스에 이미 정의되어있는 random()메소를 호출하여 매번 다른 랜덤값을 얻어올 수 있음.

 

[사용방법]

Math.random()    => 반환형이 실수자료형

0.0  <= 랜덤값 < 1.0   사이에 랜덤값을 구함

 

ex) 1~10사이의 랜덤값 구하기

0.0 <= 랜덤값 < 1.0

10 곱하기

☞ 0.0 <= 랜덤값 < 10.0

1 더하기

☞ 1.0 <= 랜덤값 < 11.0

소수점 버리기

☞ 1 <= 랜덤값 <= 10

 

[표현법]

(int) (Math.random() * 10 + 1)          => 위에 것을 표현한 것

Math.random() * 출력을 하고자하는 갯수 + 시작하고 싶은 수

랜덤값 범위 : 시작수 ~ (시작수+출력을 하고자하는 갯수)

public void method8() {
    // 1부터 매번 달라지는 랜덤값(1~10사이) 까지의 총 합계

//  double random1 = Math.random();
    int random = (int) (Math.random() * 10 + 1);
    System.out.println(random);

    int sum = 0;
    for(int i=1; i<=random; i++) {
        sum += i;
    }
    System.out.printf("1부터 %d까지의 총 합은 %d 입니다. ", random, sum);
}

 

3. String 반복문

Q. 사용자에게 문자열을 직접 입력받아서 각 인덱스별로 문자를 하나씩 뽑아서 출력.

- apple 길이 : 5
01234

 

- kiwi 길이 : 4

0123

문자열의 마지막 인덱스는 문자열의 길이 -1
추출하고자하는 인덱스의 값의 범위는 0 ~ (문자열의길이 -1)

 

★ 문자열의 길이를 알려주는 메소드 문자열.length(); => 문자열 내부에서 사용한 length()는 함수이다!!!★

public void method10() {
    // 사용자에게 문자열을 직접 입력받아서
    // 각 인덱스별로 문자를 하나씩 뽑아서 출력.

    Scanner sc = new Scanner(System.in);
    System.out.print("문자열 입력: ");
    String str = sc.nextLine();

    // 문자열의 길이를 알려주는 메소드 문자열.length();
    System.out.println("입력한 문자열의 길이 : " + str.length());

    for(int i=0; i<=str.length()-1; i++) {   // apple 입력시 : i => 0 1 2 3 4
        System.out.println(str.charAt(i));
    }
}

 

□ 구구단 출력 예시문

public void method12() {
    // 사용자가 입력한 단을 출력
    // 단수는 2~9 까지의 범위
    // 범위를 벗어난 단수를 입력시 "잘못입력했습니다(2~9사이의 정수 입력)" 출력

    Scanner sc = new Scanner(System.in);
    System.out.print("단 수(2~9) 입력 : ");
    int dan = sc.nextInt();

    if(dan >= 2 && dan <= 9) {
        for(int i=1; i<=9; i++) {
            System.out.printf("%d * %d = %d\n", dan, i, (dan*i));
        }
    }else {
        System.out.println("잘못입력했습니다(2~9사이의 정수 입력)");
    }
}

 

4. 중첩 for문

public void method13() {
    // 1 2 3 4 5
    // 1 2 3 4 5
    // 1 2 3 4 5

    for(int i=1; i<=3; i++) {
        for(int j=1; j<=5; j++) {
            System.out.print(j + " ");
        }
        System.out.println();
    }
}
public void method14() {
    // ****
    // ****
    // ****
    // ****
    // 중첩반복문 활용해서 출력해보기

    for(int i=0; i<4; i++) {
        for(int j=0; j<4; j++) {
            System.out.print("* ");
        }
        System.out.println();
    }
}

 

□ 중첩 for문 안에 if문 활용

public void method15() {
    // 1*** ==> 1행 1열일 때 => 숫자 1표시
    // *2** ==> 2행 2열일 때 => 숫자 2표시
    // **3* ==> 3행 3열일 때 => 숫자 3표시
    // ***4 

    for(int i=1; i<=4; i++) {
        for(int j=1; j<=4; j++) {
            if(i==j) {
                System.out.print(j);
            }else {
                System.out.print("*");
            }
        }System.out.println();
    }
}
public void method16() {
    // 2단부터 ~ 9단까지 모든 단을 출력
    // 각, 단 시작시 --- x단 --- 를 출력
    // 2 X 1 = 2
    // 2 X 2 = 4

    for(int i=2; i<=9; i++) {
        System.out.printf("--- %d단 ---\n", i);
        for(int j=1; j<=9; j++) {
            System.out.printf("%d * %d = %d", i,j,i*j);
            System.out.println();
        }
    }
}