본문 바로가기
Java/Basic

반복문(for, while, do-while)

by 최로이 2021. 2. 20.

1.1 for문

for문은 반복 횟수를 알고 있을 때 적합하다. 또한 구조가 직관적이라 이해하기가 쉬운 특징을 가지고 있다. 

 

1) 구조

for(초기화; 조건식; 증감식){
  //③ 조건식이 참일 때 수행될 문장들을 적는다.
}

2) for문의 수행 순서

① 조건문의 '초기화'

  -반복문에 사용될 변수를 초기화 하는 부분이며 처음 한번만 수행된다.

② 조건문의 '조건식'

  -이때 조건식의 값이 참이면 반복을 계속 진행 → 조건문의 조건식이 참인 동안에는 반복을 계속한다

  -조건식의 값이 거짓이면 for문을 빠져 나간다.

③ 수행될 문장

④ 조건문의 '증감식'

  -반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식으로 매 반복마다 변수의 값이 증감식에 의해 변하고 결국 조건식이 거짓이 되어 for문을 벗어나게 된다. 변수의 값을 1씩 증가시키는 연산자 '++'이 증감식에 주로 사용되지만 다양한 연산자들로 증감식을 작성할 수도 있다.

 

for문의 사용 예제1) 별(*)찍기

import java.util.Scanner;

//for문을 이용한 예제
//1. 별(*)찍기: 사용자가 입력하는 개수에 따라 별을 점진적으로 찍는 프로그램
public class forEx1 {

	public static void main(String[] args) {
		
		int num = 0;
		
		System.out.println("*을 출력할 라인의 수를 입력하세요 >> ");
		
		Scanner scanner = new Scanner(System.in);
		String tmp = scanner.nextLine();		//화면을 통해 입력받은 내용을 tmp에 저장
		num = Integer.parseInt(tmp);			//입력받은 문자열(tmp)을 숫자로 변환
		
		for(int i = 0;  i <num; i++) {
			for(int j = 0; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
}

for문의 사용 예제2) 구구단

//중첩 for문을 이용해서 구구단 만들기
public class forGugudan {

	public static void main(String[] args) {
		for(int i = 2; i <= 9; i++) {			//외부 for문이 1번 반복될 때,
			for(int j = 1; j  <=9; j++) {	//내부 for문은 1~9까지 반복된다
				System.out.printf("%d X %d = %d%n", i, j, i*j);
			}
		}
	}
}

 

1.2 향상된 for문

JDK1.5부터 배열과 컬렉션에 저장된 요소에 접근할 때 기존보다 편리한 방법으로 처리할 수 있도록 for문의 새로운 문법이 추가되었다. 다만 이 for문은 일반적인 for문과 달리 배열(Array)이나 컬렉션에 저장된 요소들을 읽어 오는 용도로만 사용할 수 있다는 제약이 있다.

 

기존 for문과 향상된 for문을 간단 비교해보자.

public class forEx2 {
	public static void main(String[] args) {
		
		int [] arr = {10, 20, 30, 40};
		
		//1. 일반 for문
		for(int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
		
		//2. 향상된 for문
		for(int tmp : arr) {
			System.out.println(tmp);
		}
	}
}

 

 

2.1 while문

① while문은 for문에 비해 구조가 간단하다.

② if문처럼 조건식과 블럭{}만으로 이루어져 있다.

③ while문은 조건식이 참(true)인 동안 조건식이 거짓이 될 때까지 블럭{} 내의 문장을 반복한다.

④ for문과 달리 반복 횟수가 정해져 있지 않을 때 사용하기 적합하다.

 

1) while문의 기본 구조

                 ①
while(조건식){
  //② 조건식의 연산 결과가 참(true)인 동안 반복될 문장들을 적는다.
}

2) while문의 수행 순서

① 조건식을 평가한다(참인지, 거짓인지)

② 조건식이 참이면 ②의 수행문을 수행하고, 거짓일 경우에는 블럭{} 밖으로 나간다.

//while문 예제-1) 
public class wileEx1 {

	public static void main(String[] args) {
		int i = 5;	//0~4까지의 값을 가지고 있으므로 5번 반복된다.
		
		while(i-- !=0) {
			System.out.println(i+ "조건식의 참 여부에 따라 주어진 횟수를 반복");
		}
	}
}

 

2.2 do-while문

do-while문은 while문의 변형으로 기본 구조는 while문과 동일하지만 수행될 문장이 먼저 오고 그 다음 참, 거짓 여부를 판단하는 블럭{}이 온다. 그래서 while문과 반대로 블럭을 먼저 수행한 후에 조건식을 평가한다. 즉, do-while문은 조건식이 참이 아니라도 최소 한번은 수행될 것을 보장한다.

 

1) 구조

do{
  // 조건식의 연산결과가 참일 때 수행될 문장들을 적는다.
} while(조건식);

 

do-while문의 사용 예제

import java.util.Scanner;

//do-while문 예제
//=> 임의의 값을 받아 입력한 값이 맞을 때까지 반복하는 예제
public class doWhileEx {

	public static void main(String[] args) {
		int input = 0; // 값을 입력 하여 저장하는 변수
		int answer = 0; // 랜덤 값을 저장하는 변수

		answer = (int) (Math.random() * 100) + 1; // 1~100사이의 임의의 수를 저장

		Scanner scanner = new Scanner(System.in);

		do {
			System.out.println("1과 100사이의 정수를 입력하세요 >> ");

			String tmp = scanner.nextLine();
			input = Integer.parseInt(tmp);

			if (input > answer) {
				System.out.print("더 작은 수로 다시 입력주세요.");
			} else if (input < answer) {
				System.out.print("더 큰 수로 다시 입력해주세요.");
			}
		} while (input != answer);
		System.out.println("정답입니다.");
	}
}

 

2.3 continue문

1) continue문의 특징

① continue문은 반복문 내에서만 사용할 수 있다.

② 반복이 진행되는 동안 continue문을 만나면 반복문의 끝으로 이동해 다음 반복문으로 넘어간다.

③ for문의 경우 증감식을 통해서, while, do-while문의 경우 조건식으로 이동한다.

④continue문은 반복문 전체를 벗어나지 않고 다음 반복을 계속 수행한다는 점이 break과 다르다.

⑤ if문과 함께 주로 사용되며 특정 조건을 만족하는 경우 continue문 이후의 문장들을 수행하지 않고 다음 반복으로 넘어가 계속 진행한다.

⑥ 전체 반복 중에 특정 조건을 만족하는 경우를 제외하고자 할 때 유용하다.

 

continue를 사용한 예제)

  -1~10 사이의 숫자들 중 3의 배수인 것은 제외하는 예제

public class continueEx {

	public static void main(String[] args) {
		for (int i = 0; i <= 10; i++) {
			if (i % 3 == 0)
				continue;
			System.out.println("3으로 나눈 나머지가 0일 때의 몫은 "+ i +" 입니다.");
		}
	}
}

'Java > Basic' 카테고리의 다른 글

String 배열  (0) 2021.02.23
배열(Array)  (0) 2021.02.21
조건문(if, switch)  (0) 2021.02.19
연산자  (0) 2021.02.18
형변환(Casting)  (0) 2021.02.17

댓글