본문 바로가기

Programming Language/JAVA

[JAVA] java 반복문과 기타제어문 ( while문&do-while문& break문 & continue문 )

 

 while 
- 사용자가 원하는 만큼 명령들을 여러번 실행하는 제어구조이다.
- 특정 조건이 만족되는 동안 명령을 계속적으로 실행한다.

 

예> while(조건){
           실행문;
        }
조건문이 참이경우에만 루프처리로써 실행문이 반복됩니다.

 

 

package day03;

import java.util.Scanner;

public class Test07 {

	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		String name;
		while(true) {
			System.out.println("이름 입력");
			System.out.print(">>>");
			name = input.next();
			System.out.println("당신의 이름은 "+name+"이군요");
		}
	}

}

먼저, name변수를 String타입으로 선언해줍니다.
while 반복문에 있는 ()는 참일경우에 반복적으로 실행해줍니다.
name변수에 이름을 입력해주고, 당신의 이름은 OOO이군요. 라는 메시지를 출력해줍니다.
계속 반복적으로 실행되는 이유는 while 뒤에 (true)를 했기때문입니다.

 

 

 

 

package test;

import java.util.Scanner;
public class Quiz {
	public static void main(String[] args) {
		int i=1;
		int sum=0;
		while(i<=10) {
			sum+=i;
			i++;
		}
		System.out.println("1~10까지의 합: "+sum);
	}

}

while문을 이용해서 1~10까지의 합을 구하는 소스입니다.
int타입인 i변수는 1로 저장해주고, sum변수는 초기화를 시킨0을 저장합니다. 
sum은 1~10까지의 합을 저장해줄 하나의 변수입니다.
while문을 통해서 i<=10이라는 조건식에서 현재 i는 1이고 1보다 10이 크기때문에 참이되서
반복문에 들어가게되고 sum=sum+i를 sum+=i를 통해 저장해줍니다.
i를 증감시켜서 2가되고 2가 10보다 작기때문에 참이되므로 계속 sum에 더하면서 저장해줍니다.
i가 11이되면 10보다 크기때문에 거짓이되어 while문을 빠져나와 sum값에는 현재 55가 저장되어있으므로, 
출력하면 55가 나오게됩니다.

 

 

 

 

 

 

 

package dya05;

import java.util.Scanner;

public class Test02 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int i,sum=0;
		while(true) {
			System.out.print("수 입력(1~100) : ");
			i = sc.nextInt();
			if(i>=1&&i<=100) {
				break;
			}
			System.out.println("잘못 입력, 다시");
			continue;
		}
		for(int j=1;j<=i;j++) {
			sum+=j;
			System.out.println("입력 받은 수까지의 합: "+sum);
		}
	}
}

1부터100까지의 수를 i변수에 scanner을 통해 입력을 받습니다.
만약 사용자가 1~100의 수를 정상입력했다면 break문을 통해 while문을 나오게됩니다.
만일 1~100의 수가 아니라면 잘못입력이라고 메시지 출력후, continue문을 통해
바로 while문으로 올라가서 다시 입력하라고 메시지가 출력됩니다.(break문,continue문은 밑에서 말씀드리겠습니다.)
만약 1~100수의 정상입력되었다면 현재 i라는 변수에 입력한 수가 저장되어있기에, for문을 통해 j를 1로 선언해주고
1<=입력수(i)만큼 지속적으로 sum변수에 저장해줍니다.(이부분은 위에 while문 예제와 동일합니다.)

 

 

 

 

 

 


 

 

 do-while문
- 다음의 종속 문장을 먼저 실행한 후에 조건식을 평가한다.
- while은 조건을 먼저 확인하고 실행하지만, do-while문은 먼저 실행해주고나서 조건을맞추는 형식이다.

 예>  do{
           실행문;
         }while(조건);

 

 

package dya05;

public class Test04 {

	public static void main(String[] args) {
		int su = 0, sum = 0;
		do {
			su++;
			sum+=su;
		}while(su<=9);
		System.out.println("sum="+sum);
	}
}

이번에는 조건이 뒤에있으므로 위에서부터 순서대로 소스를 내려가보면
su변수에 증감해줘서 1이 저장되고, sum에 su를 지속적으로 저장해줍니다.
그다음 조건을 확인해주고 다시 올라가서 반복되다가 마지막에 10까지 실행문에서 저장이되고 10<=9가 거짓이므로,
sum은 55가 저장되서 메시지출력됩니다.

 

 

 

 


 

 

 break문
- 반복문이 실행되고 있는 시점에서 가장 근접한 반복문(루프) 탈출한다.
- 여러개의 반복문이 중첩된 경우 현재 위치한 반복문 하나만 탈출한다.

 continue문
- 반복도중 처리를 중단하고 반복문의 시작위치로 이동한다.
- 정밀한 제어구조를 만들때 사용한다.

 

 

 

package test;

import java.util.Scanner;

public class Quiz {

	public static void main(String[] args) {
		int i = 0;
		while (i < 5) {
			i++;
			if (i == 3) {
				continue;
			}
			if (i == 3) {
				System.out.println("실행");
			}

			System.out.println("i: " + i);
		}
	}

}

continue문을 먼저 알아보겠습니다.

i를 int형으로 선언해주고, while문에서 조건먼저 확인하고 참이기에 반복문에 들어가게됩니다.
들어오자마자 i를 증감시켜주고, 조건문if문에서 3일이냐는 조건에서 거짓이기에 i의 숫자1은 그대로 내려가고 다음if문에서도
거짓이기에 i를 출력해줍니다.
i가 다시 증감되고 다시 2도 똑같이 출력이되고 3이되고난후, 첫번쨰if문에서 continue를 만나 아래 소스로 내려가지않고
다시 while문으로 올라가게됩니다. (두번째 if문이 실행이 안되는이유는 continue가 만나면 while문으로 올라가고, 올라가자마자 i가 4로 증감되기에 두번쨰 if문은 실행이 되지않습니다.)

 

 

 

 

package dya05;

public class Test06 {
	public static void main(String[] args) {
		int i=0;
		while(i<5) {
			i++;
			if(i==3) {
				System.out.println("i: "+i+":break");
				break;
			}
			System.out.println("i: "+i);
		}
	}
}

break문을 먼저 알아보겠습니다.
while문이 1이 5보다 작기때문에 참이되서 반복문에 들어가고, 조건문을 만나 i가 3이 아니기에 거짓으로써, 그냥 맨아래
i인 1이 출력됩니다.
2도 똑같이 출력이되고, while문아래 2가 3으로 증감되고 if문에서 3이 일치되기에 참으로써 3을 출력해주고 break라는 문구도 같이 출력을해줍니다. 그리고 break문을 만나면 그즉시 반복문에서 빠져나오게되므로, 4와 5가 확인도 안받고 그냥 나오게됩니다.