ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5. 반복문 (while문, do~while문, for문)
    개발자 수업/Java 2021. 10. 1. 23:18

    1. while문
        1) 조건이 참(true)인 동안 반복수행하기
        2) 조건이 맞지 않으면 반복하던 수행을 멈추게 됨
        3) 예) 달리는 자동차, 일정 횟수만큼 돌아가는 나사못, 
        4) while(조건식){
            수행문1;
            ....
            }

            수행문2;

    package kr.co.ezenac.loop;
    
    public class WhileTest {
    	public static void main(String[] args) {
    		int sum = 0;
    		int i = 1;
    		
    		/*
    		 * while문 옆에는 조건식만 들어가기 떄문에
    		 * for문에 비해서 일반적 반복에서는 가독성이 떨어짐
    		 * while문은 초기화하는 부분이 따로 존재하지 않음
    		 */
    		
    		while(i<=100) {
    			sum += i;
    			i++;
    		}
    		System.out.println("1~100까지의 합 : " + sum);
    		
    		/*
    		 * while문은 무한 루프용으로 많이 사용함
    		 * if()문을 break와 함께 무한 루프를 벗어날 코드를 작성해야 함
    		 */
    		
    		int j = 1;
    		while(true) {
    			System.out.println(j);
    			if(j>=100) {
    				break;
    			}
    			j++;
    		}
    	}
    }

     

    package kr.co.ezenac.loop;
    
    import java.util.Scanner;
    
    public class WhileTest02 {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		
    		boolean run = true;		// flag 변수
    		int speed = 0;
    		
    		while(run) {
    			System.out.println();
    			System.out.println("==============================");
    			System.out.println(" 1. 증속   | 2. 감속   | 3. 중지 ");
    			System.out.println("==============================");
    			System.out.print("입력 : ");
    			
    			int choice = scan.nextInt();
    			
    			if(choice == 1) {
    				speed++;
    				System.out.println("현재 속도 : " + speed);
    			}
    			else if(choice == 2) {
    				speed--;
    				System.out.println("현재 속도 : " + speed);
    			}
    			else if(choice == 3) {
    				//break;
    				//System.exit(0);
    				run = false;
    				
    			}
    			else {
    				System.out.println("잘못된 입력 값입니다.");
    			}
    		}
    		System.out.println("프로그램을 종료합니다.");
    		scan.close();
    	}
    }

     

    package kr.co.ezenac.loop02;
    
    import java.util.Scanner;
    
    /*
     * 사용자로부터 숫자를 입력받아서
     * 해당 숫자가 음의 정수가 아닐 경우
     * 음의 정수가 입력될 떄까지 다시 입력을 받는 프로그램을 구현하시오.
     * 
     * 출력예시)
     * 음의 정수를 입력하세요 : 3
     * 잘못 입력했습니다.
     * 음의 정수를 입력하세요 : 2
     * 잘못 입력했습니다.
     * 음의 정수를 입력하세요 : -1
     * 사용자가 입력한 음의 정수 : -1
     */
    
    public class WhileTest02 {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		System.out.print("음의 정수를 입력하세요 : ");
    		int number = scan.nextInt();
    		
    		while(number >= 0) {
    			System.out.println("잘못 입력했습니다.");
    			System.out.print("음의 정수를 입력하세요 : ");
    			number = scan.nextInt();
    		}
    		
    		System.out.println("사용자가 입력한 음의 정수 : " + number);
    		
    		scan.close();
    	}
    }



    2. do ~ while문
        1) 조건과 상관없이 한 번은 수행문을 수행
        2) do {
                수행문1;
                ...
            } while(조건식);
                
                수행문2;
                ...

    package kr.co.ezenac.loop02;
    
    import java.util.Scanner;
    
    public class DoWhileTest {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		
    		System.out.println("메세지를 입력하세요.");
    		System.out.println("프로그램을 종료하려면, q를 입력하세요.");
    		
    		String str = null;
    		
    		do {
    			System.out.print(">");
    			str = scan.nextLine();
    			System.out.println("입력받은 메세지 : " + str);
    		} while(!str.equals("q"));
    		
    		System.out.println("프로그램을 종료합니다.");
    		
    		scan.close();
    	}
    }

     

    package kr.co.ezenac.loop02;
    
    /*
     *  5
     *  4
     *  6
     *  0 (을 입력하면 종료하고
     *  15 (이제껏 입력한 수의 합이 출력됨
     */
    
    import java.util.Scanner;
    
    public class DoWhileTest02 {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		System.out.print("");
    		int input;
    		int sum = 0;
    		
    		do {
    			input = scan.nextInt();
    			sum += input;	
    		} while(input!=0);
    		
    		System.out.println(sum);
    		
    		scan.close();
    	}
    }



    3. for문
                    1       2       4
        1) for(초기화식; 조건식; 증감식){
                수행문; 3
                ...
            }
            수행 순서 : 1 - 2 - 3 - 4 - 2 - 3 - 4 ...

    package kr.co.ezenac.loop03;
    
    public class ForTest {
    	public static void main(String[] args) {
    		int sum = 0;
    		
    		// 1~100까지 합
    		for(int i=1; i<101; i++) {
    			sum += i;
    			System.out.println("sum : " + sum);
    		}
    		System.out.println("1~100까지의 합 : " + sum);
    	}
    }

     

    package kr.co.ezenac.loop03;
    
    /*
     * 2000이상일 때 i의 값 :
     * 2000이상일 때 sum의 값 :
     */
    
    public class ForTest02 {
    	public static void main(String[] args) {
    		int sum = 0;
    		
    		for(int i=1; i<101; i++) {
    			sum += i;
    			
    			if(sum>=2000) {
    				System.out.println("2000이상일 때 i의 값 : " + i);
    				System.out.println("2000이상일 때 sum의 값 : " + sum);
    				break;
    			} 
    		}
    	}
    }

     

    package kr.co.ezenac.loop03;
    
    public class GugudanTest {
    	public static void main(String[] args) {
    		for(int i=2; i<10; i++) {
    			for(int j=1; j<10; j++) {
    				System.out.println(i + "*" + j + "=" + (i*j));
    			}
    			System.out.println();
    		}
    	}
    }

     

    package kr.co.ezenac.loop03;
    
    import java.util.Scanner;
    
    /*
     * 구구단을 출력합니다.
     * 몇 단부터 출력할까요? : 3
     * 끝 단은 얼마인가요? : 5
     * 
     * =========3단=========
     * 3*1=3
     * 3*2=6
     * ...
     * 3*9=27
     * =========4단=========
     * 4*1=4
     * 4*2=8
     * ...
     * 4*9=36
     * =========5단=========
     * 5*1=5
     * 5*2=10
     * ...
     * 5*9=45
     */
    
    public class InputGugudanTest {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		
    		System.out.println("구구단을 출력합니다.");
    		System.out.print("몇 단부터 출력할까요? : ");
    		int a = scan.nextInt();
    		System.out.print("끝 단은 얼마인가요? : ");
    		int b = scan.nextInt();
    		
    		for(int i=a; i<=b; i++) {
    			System.out.println("=========" + i + "단=========");
    			
    			for(int j=1; j<10; j++) {
    				System.out.println(i + "*" + j + "=" + (i*j));
    			}
    			System.out.println();
    		}
    		scan.close();
    	}
    }



    4. 각 반복문의 쓰임
                while문                                   do~while문                                  for문
        ------------------------------------------------------------------------------------------------------------------------
        조건문이 참인 동안 반복 수행    조건문이 참인 동안 반복 수행               초기화, 조건체크, 증감 순으로 실행
        조건문이 맞지 않으면 수행되는   수행문을 먼저 수행하고 조건을 체크
        부분이 없음
        ------------------------------------------------------------------------------------------------------------------------
        조건식의 결과나 변수가 true, false값인 경우 주로 사용                         특정 수의 범위, 횟수와 관련하여
                                                                                                       반복되는 경우 주로 사용
                                                                                                       배열과 함께 많이 사용함

    5. for문의 문장들은 생략 가능함
        1) 초기화식 생략 : 이미 이전에 값이 초기화되어 for 내부에서 값을 지정할 필요가 없는 경우
            int i = 0;
            for( ; i<5; i++){
                ...
            }
        2) 조건식 생략 : 반복 수행에 대한 조건이 수행문 내부에 있는 경우
            for(i=0; ; i++){
                sum += 1;
                if(sum>200) break;
            }
        3) 증감식 생략 : 증감식에 대한 연산이 복잡하거나 다른 변수의 연산 결과값에 결정되는 경우
            for(i=0; i<5; ){
                i = (++i) % 10;
            }
        4) 무한반복
            for( ; ; ){
                ...
            }

    6. 반복문이 여러 번 포개진 중첩 반복문
        1) 중첩 반복문
            - 반복문 내부에 또 다른 반복문이 있음
            - 여러 겹으로 반복문을 겹쳐서 구현 가능
            - 외부 반복문과 내부 반복문 간의 변수 값 변화에 유의하며 구현하여야 함

     

    7. 중간에 멈추는 break문, 무시하고 계속 진행하는 continue문
        1) break문 사용하기
            - 감싸고 있는 제어문의 블록을 빠져 나오는 기능 (switch문에서도 사용)
            - 반복문에서 주로 조건문(if)과 같이 사용하여 조건에 해당되는 경우 반복 수행을 멈추고 외부로 수행이 이동

    // 1부터 숫자를 더하여 100이 넘는 순간의 숫자와 합을 출력
    
    public class BreakTest {
    	public static void main(String[] args) {
    		
    		int sum = 0;
    		int num;
    		
    		for(num=1; ; num++) {
    			sum += num;
    			if(sum>=100) break;
    		}
    		System.out.println(sum);
    		System.out.println(num);
    	}
    }


        2) continue문 사용하기
            - 반복문 내부에서 조건문(if)과 같이 사용하며, 조건이 맞는 경우(true) 이후 반복문 블럭 내부의 다른 수행문들은 수행하지 않음

    public class ContinueTest {
    	public static void main(String[] args) {
    		
    		// 1부터 100까지 숫자 중 3의 배수를 출력하시오		
    		int num;
    		for(num=1; num <= 100; num++) {
    			if((num%3)!=0) continue;
    			System.out.println(num);
    		}
    		System.out.println();
    		
    		// 1~100까지 사이에서 짝수만 출력하시오
    		int x;
    		for(x=1; x<=100; x++) {
    			if((x%2)!=0) continue;
    			System.out.println("짝수 : " + x);
    		}
    		System.out.println();
    		
    		// 2와 3의 공배수만 출력하시오
    		for(int i=1; i<=100; i++) {
    			if((i%2)==0 && (i%3)==0) {
    				System.out.println("공배수 : " + i);
    			}
    		}System.out.println();
    		
    	}
    }

    댓글