카테고리 없음

[자바JAVA] 제어문 _ 반복문 (for 문, while문)

pupu91 2022. 7. 5. 11:30
반응형

 

제어문 - 반복문 (for 문, while문)

 

  • 프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록한다.
  • 대부분 특정 조건이 만족되는 동안 반복을 시행한다.
  • 반복문의 종류 : for문(반복횟수를 알 때 적합), while문(반복횟수를 모를 때)

 


 

for문

for(초기식; 조건식; 증감식;){
수행될 문장;
}

 

● 1부터 10까지 1씩 증가시키면서 (10번) i 값을 출력하는 기본 반복문
for(int i = 1; i <= 10; i++){
        System.out.println(i + "출력");
}

● 실행결과
1 출력
2 출력
...
9 출력
10 출력

1회전
초기식 확인 후 조건식 확인
조건식이 true면 문장 수행
(1회전 조건식 i는 1이기 때문에 true -> 1 출력 문장 수행)
조건식이 false면 수행하지 않음

2회전
증감식 연산 후 조건식 확인
조건식이 true면 문장 수행
(증감식 연산 후 i값은 2이기 때문에 true => 2출력 문장수행)
조건식이 false면 수행하지 않음

* 2회전 이상부터는 모두 2회전과 동일하고, 조건식이 false가 나올 때까지 문장 주행
( 증감식 연산 후 11이되면 i <= 10의 조건에 맞지 않기 때문에 false => 반복문을 빠져나와 종료됨)





for문 예제




  • 1 ~ 10까지의 합계를 구하시오
int sum = 0; 결과를 누적시켜 담아줄 변수 선언
for(int i = 1; i <= 10; i++){
   sum += i;
  } 
  System.out.println("sum : " + sum);
}
● 실행 결과
sum = 55



  • 5~10 사이의 난수를 발생시켜서 1에서부터 발생한 난수까지의 합계를 구해보자
int random = (int) (Math.random() * 6) + 5;
int sum = 0;
		
for(int i = 1; i <= random; i++) {
		sum += i;
	}		
System.out.println("1부터 " + random + "까지의 합계는 " + sum + "입니다.");
}
● 실행 결과
1부터 5까지의 합계는 15입니다.




  • 숫자 두 개를 입력 받아 작은 수에서 큰 수까지의 합계를 구하세요. 단, 두 숫자는 같은 숫자를 입력하지 않는다는 가정으로 해결해본다.
Scanner sc = new Scanner(System.in);
System.out.print("첫 번째 정수 입력 : ");
int first = sc.nextInt();
System.out.print("두 번째 정수 입력 : ");
int second = sc.nextInt();
		
int sum = 0;
● first와 second 중 어느 것이 더 큰 수인지 확인하면 
작은 수에서 시작해서 큰 수까지의 합계를 구하는 반복문을 작성할 수 있다.
		
int max = 0;
int min = 0;
		
 if(first > second) {
	max = first;
	min = second;
} else {
	max = second;
	min = first;
}
  for(int i = min; i <= max; i++) {
	sum += i;
}
  System.out.println(min + "부터 " + max + "까지의 합은 " + sum + "입니다.");
	}		
 ● 실행 결과
첫 번째 정수 입력 : 1 
두 번째 정수 입력 : 2
1부터 2까지의 합은 3입니다.





  • 키보드로 정수 값을 입력 받아 2~9 사이의 값인 경우 해당 단의 구구단을 출력하고, 그렇지 않은 경우 "반드시 2~9 사이의 양수를 입력해야 합니다." 출력해보자.
Scanner sc = new Scanner(System.in);
System.out.print("출력할 구구단의 단 수를 입력하세요 : ");
int dan = sc.nextInt();

● 입력한 숫자가 2~9 사이인지 조건 확인 
 if(dan >= 2 && dan <= 9) {
      for(int su = 1; su <= 9; su++) {
			System.out.println(dan + " * " + su + " = " + (dan * su));
	}
} else {
	System.out.println("반드시 2~9 사이의 양수를 입력해야 합니다.");
}

● 실행 결과
출력할 구구단의 단 수를 입력하세요 : 5
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45




중첩 for문

 

for(초기값 1; 조건식1; 증감식1){
       수행될 문장1;
       for(초기값2; 조건식2; 증강식2){
       		수행될 문장2;
       }
       수행될 문장3;
 }
 ● for문에 진입하면 수행 될 문장1을 먼저 수행하고 두 번째 for문에 진입하면
   조건식2가 false가 될 때 까지 수행 될 문장2를 수행 한다.
 ● 조건식2가 false가 되어 반복문을 빠져나오면 수행 될 문장3을 수행하고
   조건식1로 돌아와 true면 다시 반복을 한다.
반응형

 

중첩for문 예제




  • 2 단부터 단을 1씩 증가시키는 반복문
for(int dan = 2; dan < 10; dan++) {
  System.out.println("========== " + dan + "단 ==========");
  
● 단이 1개씩 증가하는 동안 수행할 내용은 해당 단의 구구단을 출력하는 것
for(int su = 1; su < 10; su++) {
  System.out.println(dan + " * " + su + " = " + (dan * su));
}

● 실행 결과
========== 2단 ==========
2 * 1 = 2
2 * 2 = 4
....
9 * 8 = 72
9 * 9 = 81




  • 키보드로 입력 받은 정수만큼 행으로 별을 출력하는 메소드
Scanner sc = new Scanner(System.in);
System.out.print("출력할 행 수를 입력하세요 : ");
int row = sc.nextInt();
● 입력한 행만큼 반복
for(int i = 1; i <= row; i++) {
● 별을 5개 출력하는 것을 반복
for(int j = 1; j < 6; j++) {
    System.out.print("*");
    }
● 한 행에 대해서 별을 출력하고 난 뒤 줄바꿈
   System.out.print();
 }
● 실행 결과
출력할 행 수를 입력하세요 : 2
*****
*****





● 키보드로 입력 받은 정수 행만큼 별을 삼각형 모양으로 출력해보자.

Scanner sc = new Scanner(System.in);
System.out.print("출력할 줄 수를 입력하세요 : ");
int row = sc.nextInt();
● 입력한 행만큼 반복
for(int i = 1; i <= row; i++){
● 행의 수만큼만 별을 출력하는 반복문
for(int j = 1; j <= i; j++){
    System.out.print("*");
    }
 System.out.println();
}
● 실행 결과
출력할 줄 수를 입력하세요 : 3
*
**
***





while 문

while(조건식) {
수행될 문장;
[증감식 or 분기문];
}



  • 조건식이 true일 때 반복문 진입하여 수행될 문장이 끝나면 조건식을 다시 확인한다. 조건식이 true면 반복문에 다시 진입하여 수행될 문장을 수행하고, 조건식 false가 될 때 까지 반복한다.
  • {} 안에 조건을 벗어나게 할 연산(증감식, 분기문)필요
 ● 1부터 10까지 1씩 증가시키면서 i값을 출력하는 기본 반복문
int i = 1;
while(i <= 10) {
 	System.out.println(i + "출력");
    i++;
 }
 ● 실행 결과
 1 출력
 2 출력
 ....
 9 출력
 10 출력




 

whil문 예제

 

  • 입력한 문자열의 인덱스를 이용하여 문자 하나씩 출력 해보자
Scanner sc = new Scanner(System.in);
System.out.print("문자열 입력 : ");
String str = sc.nextLine();

System.out.println("======while문======")
int index = 0;
while(index <str.length()){
      char ch = str.charAt(index);
      System.out,println(index + " : " + ch);
      index++;
}
System.out.println("======for문======")
for(int i = 0; i < str.length(); i++){
    char ch = str.charAt(i);
    System.out.println(i + " : " + ch);
    }
● 실행 결과
문자열 입력 : hello
========== while문 ==========
0 : h
1 : e
2 : l
3 : l
4 : o
========== for문 ==========
0 : h
1 : e
2 : l
3 : l
4 : o





  • 정수 하나를 입력 받아 1부터 입력 받은 정수까지의 합계를 구하자
Scanner sc = new Scanner(System.in);
System.out.print("정수를 하나 입력하세요 : ");
int num = sx.nexInt();

int sum = 0;
int i = 1;
while(i <= num){
      sum += i;
      i++;
 }
 System.out.println("1부터 입력 받은 정수 " + num 
          + " 까지의 합은 " + sum + " 입니다. ");
 }
● 실행 결과
정수를 하나 입력하세요 : 2
1부터 입력 받은 정수 2까지의 합은 3입니다.



  • 중첩 while문을 이용한 구구단 출력하기
int dan = 2;
while(dan < 10) {
     int su = 1;
     while(su < 10){
         System.out.println(dan + " * " + su + " = " + (dan * su ));
         su++;
         }
         dan++;
     }

 


do ~ while문

do{
수행될 문장;
[증감식 or 분기문];
} while(조건식);

 

  • do 안의 내용 먼저 실행, 조건식 확인 후 true면 문장 수행, false면 종료 , while 뒤에 ; 꼭 필요함.
  • {} 안에 조건을 벗어나게 할 연산(증감식, 분기문) 필요
  • while과 do~whil의 차이점 : do ~while은 조건문이 true가 아니더라도 무조건 한 번 이상 수행!

 

  • do ~ while문 예시
int i = 1;
do {
 		System.out.println (i + "출력");
        i++;
 } while(i <= 10);
 ● 실행 결과
 1 출력
 2 출력
 ...
 9 출력
 10 출력

 


 

do ~ while 문 예제



  • 키보드로 문자열 입력 받아 반복적으로 출력한다. 단, exit가 입력 되면 반복문을 종료한다.
Scanner sc = new Scanner(System.in);
String str = " ";

do{
   System.out.print("문자열을 입력하세요 : ");
   str = sc.nextLine();
   System.out.println("입력한 문자 : " + str);
   문자열(참조 자료형)은 ==로 값 비교가 불가능하다.
   String 클래스에서 제공하는 equals() 메소드를 통해 비교하기.
   } while(!str.equals("exit"));
   System.out.println("프로그램을 종료합니다.");
 }
 ● 실행 결과
문자열을 입력하세요 : while
입력한 문자 : while
입력한 문자 : exit
프로그램을 종료합니다.








분기문

 


 

1 . break

  • 반복문에서 break문은 자신이 포함 된 가장 가까운 반복문을 빠져나가는 구문이다.


- break문 예시 -

for(int i = 1;; i++) {
    System.out.println(i + "출력");
    
    if(i >= 10) {
    beak;
    }
 }

 

  • 중첩 반복문에서의 break
for(초기값1; 조건식1; 증감식1){
     수행될 문장1;
     for(초기값2; 조건식; 증감식2){
         수행될 문장2;
         break;
  }
    수행될 문장3;
    [break;]
}

: 두 번째 for문에 break를 만날 경우 반복문을 나가 수행 될 문장3을 수행 후 다시 첫 번째 for문을 실행하지만, 마지막 break가 있다면 수행 될 문장3을 수행 후 for문을 완전히 빠져나감.


2 . continue

  • 반복문 내에서만 사용 가능하며, 반복문 실행 시 continue 아래 부분은 실행하지 않고 반복문을 다시 실행한다. for문의 경우 증감식으로 이동, while(do~while)문의 경우 조건식으로 이동 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용하다.


- continue 문 예시

for(int i = 1; i <= 10; i++){
     if(i % 2 == 0){
            continue;
     }
     System.out.println(i + "출력");
     }
● 실행결과
3출력
5출력
7출력
9출력
반응형