반복문

hovi·2023년 5월 30일
0

JAVA

목록 보기
9/36

반복문이란 주어진 조건이 참인 경우 혹은 주어진 횟수만큼 반복적으로 프로그램을 수행 합니다.

프로그램이 처리하는 코드의 많은 부분이 반복적으로 수행되는 형태가 많으므로 가장 많이 사용되는 제어문 입니다.

  1. while 문
  2. do ~ while문
  3. for문
  4. Enhanced for 문

while 문

주어진 조건이 참인 동안 수행되는 반복문 입니다.

while(조건식) {

조건이 참인 동안 반복적으로 실행되는 명령문;

}

while(n > 0) {
	sum += n;
	n--;
}

잘못 입력된 경우 반복문 계속 수행 (유효값 체크)

public class While {
    public static void main(String[]args) {
        int age;
				 Scanner sc = new Scanner(System.in);
        while(true) {
            System.out.print("나이를 입력 하세요 : ");
            age = sc.nextInt();
            if (age > 0 && age < 200) break;
            else System.out.println("나이를 잘못 입력 하셨습니다. ");
        }
    }
}

정해진 횟수 반복 하기

int treeHit = 0;
while (treeHit < 10) {
    treeHit++;
    System.out.println("나무를  " + treeHit + "번 찍었습니다.");
    if (treeHit == 10) {
        System.out.println("나무 넘어갑니다.");
    }
}

do ~ while문

먼저 루틴을 수행하고 조건을 나중에 비교 합니다.

해당 루틴이 한번은 수행되어야 하는 경우 사용하며 while문으로 대체 가능 합니다.

do {

한번은 무조건 수행되고 조건이 참인 경우 반복적으로 수행되는 루틴

} while(조건식);

public class While {
    public static void main(String[]args) {
        int age;
        do {
            System.out.print("나이를 입력 하세요 : ");
            Scanner sc = new Scanner(System.in);
            age = sc.nextInt();
        } while(age <= 0 || age >= 200);
    }
}

for문

for문내에 초기식, 조건식, 증감식에 대한 식을 가지고 있는 유한의 갯수를 반복 수행할 때 유용하게 사용 됩니다.

for문내의 초기식, 조건식, 증감식은 각각 생략 할 수 있습니다.

for문에서 실행될 명령문이 한 중인 경우 중괄호를 생략 할 수 있습니다. (조건문도 동일)

for(초기식;조건식;증감식) {

참인 동안 반복적으로 실행되는 명령문;

}

기본 for문

public static void main(String[]args) {
    for (int i = 1; i <= 100; i++) {
        System.out.printf("%4d", i);
        if (i % 10 == 0) System.out.println();
    }
    System.out.println();
}

중첩 for문(별찍기)


   public static void main(String[]args) {
      for (int i = 0; i < 10; i++) {
          for (int j = 0; j < 10; j++) {
              System.out.print("* ");
          }
          System.out.println();
      }
  }

구구단 찍기

public static void main(String[]args) {
  for (int i = 2; i < 10; i++) {
      for (int j = 1; j < 10; j++) {
          System.out.printf("%d x %d = %d\n", i, j, (i*j));
      }
      System.out.println();
  }
}

사각형 찍기

public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i <= n*n; i++) {
            System.out.printf("%3d", i);
            if(i % n == 0) System.out.println();
        }
    }

별찍기 (2중 for 기본)

Scanner sc = new Scanner(System.in);
  int n = sc.nextInt();
  for (int i = 0; i < n; i++) {
      for (int j = 0; j < n;j++) {
          System.out.print("* ");
      }
      System.out.println();
 }

제어문

break문

break 문은 루프 내에서 사용하여 해당 반복문을 완전히 종료시킨 뒤, 반복문 바로 다음에 위치한 명령문을 실행합니다.

즉 루프 내에서 조건식의 판단 결과와 상관없이 반복문을 완전히 빠져나가고 싶을 때 사용합니다.

주로 반복문에서 사용되며, switch 문의 case를 끝낼 때도 사용 됩니다.

continue 문

continue 문은 루프 내에서 사용하여 해당 루프의 나머지 부분을 건너뛰고, 바로 다음 조건식의 판단으로 넘어가게 해줍니다.

보통 반복문 내에서 특정 조건에 대한 예외 처리를 하고자 할 때 자주 사용됩니다.

연습문제 (1)

  • 삼각형 별찍기
  • 코드 보기
    public static void main(String[]args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < i+1;j++) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }

연습문제(2)

  • 두개의 주사위 (랜덤 함수 사용)
public static void main(String[] args) {
    int rand1, rand2;
    int cnt = 0;
    while(true) {
        cnt++;
        rand1 = (int) ((Math.random() * 6) + 1); // 랜덤 함수는 실수형으로 값이 생성되므로 형변환이 필요.
        rand2 = (int) ((Math.random() * 6) + 1);
        if((rand1 + rand2) == 12) {
            System.out.printf("무인도를 %d 번만에 탈출 합니다.\n", cnt);
            break;
        } else {
            System.out.println("주사위의 합이 " + (rand1 + rand2) + "입니다.");
        }
    }
}

연습문제(3)

  • 중복 없는 로또 번호 만들기
public class Main {
   public static void main(String[] args) {
       int[] lotto = new int[6];
       int val, index = 0;
       boolean isExist = false;
       while(true) {
           val = (int)((Math.random() * 45) + 1);
           for (int i = 0; i < 6; i++) {
               if (lotto[i] == val) isExist = true;
           }
           if(!isExist) lotto[index++] = val;
           if(index == 6) break;
           isExist = false;
       }
       for(int i = 0; i < 6; i++) {
           System.out.print(lotto[i] + " ");
       }
       System.out.println();
   }
}

연습문제(4)

  • 양의 정수 n을 입력 받아 n * n 크기의 행렬을 출력하는 프로그램 작성
  • 이 때 행렬의 값은 1부터 시작하여 왼쪽에서 오른쪽, 위에서 아래 순서대로 채워 넣음.
  • 코드 보기
    import java.util.Scanner;
    
    public class Test {
        public static void main(String[] args)  {
            Scanner sc = new Scanner(System.in);
            System.out.print("정수 입력 : ");
            int n = sc.nextInt();
            for (int i = 0; i <= n * n; i++) {
                System.out.printf("%4d", i);
                if (i % n == 0) System.out.println();
            }
        }
    }
profile
풀스택 예비 개발자

0개의 댓글