[Java] for문과 while문, break문과 continue문

김용준·2022년 9월 18일
0

Java Basic

목록 보기
11/22

for

for (초기화식, 조건식, 증감식) {
실행문1;
실행문2;
실행문3;
}
  • for문은 특정 실행문을 반복 수행한다.
  • 조건식의 결과값이 true인 경우, 블럭 내 실행문을 반복 수행한다.
  • 반복 횟수를 알고 있을 때 for문을 사용한다.

구조

for문은 위와 같이 '초기화식', '조건식', '증감식', 블럭{}으로 구성되어 있다.

초기화식은 for문을 제어하기 위한 변수를 초기화하는 부분이며 처음 한번만 수행된다. 초기화식에서 선언한 변수는 조건식, 증감식 및 for문의 블록내에서만 사용가능하다.
보통 변수 하나로 제어하지만, 둘 이상의 변수가 필요할 때는 콤마,로 구분한다. 또한, 두 변수의 타입은 같아야 한다.

조건식은 for문의 블럭 내 실행문들의 반복 여부를 판단한다. 조건식의 결과값이 true이면 반복을 계속하고, false이면 반복을 중단하고 for문을 벗어난다.

증감식은 for문을 제어하는 변수를 증가 또는 감소시키는 식이다. 예를 들어, 초기화식의 변수를 1씩 증가시키다가 조건식이 거짓이되면 for문을 벗어난다.
주로 연산자++이 사용되지만 --, +=, *= 등 다양한 연산자도 사용 가능하다. 증감식도 초기화식의 변수와 마찬가지로 콤마,를 이용하여 두 문장 이상을 사용할 수 있다.

초기화식, 조건식, 증감식은 모두 생략할 수 있다. 조건식이 생략된 경우, true로 간주되어 실행문을 무한 반복한다.

실행순서


1. 초기화식이 수행된다.
2. 조건식의 결과값이 true이면 실행문을 수행한다.
3. 증감식을 수행한다.
4. 2, 3과정을 반복하다 조건식의 결과값이 false이면 반복문을 종료한다.

정리하면 초기화식 이후 (조건식->수행문->증감식)을 반복하다 조건식의 결과값이 false일 때, 반복문을 종료한다.

다음은 for문을 활용한 예제이다. "Hello, Java"를 3회 출력하고 각 출력이 몇 번째 반복인지 표시한다. n의 초기값이 1이고 블럭 내 실행문을 수행하면 n이 1씩 증가한다. n이 3을 초과하면 조건식에 위배되므로 for문을 벗어난다.

public class For {

	public static void main(String[] args) {
		
		for (int n = 1; n <= 3; n++) {
			System.out.println(n+ ". Hello, Java");
		}
	}
}
출력

1. Hello, Java
2. Hello, Java
3. Hello, Java

앞서 공부했던 if문을 for문 블럭에 넣어 사용하는 예제이다. 1부터 10까지의 정수 중, 짝수와 홀수의 합계를 계산한다. if문의 조건식이 짝수인지 홀수인지를 판단하여 계산한다.

public class For {

	public static void main(String[] args) {

		// for문 내부의 if문
		int evenNumberTotal = 0;
		int oddNumberTotal = 0;
		for (int number = 1; number <= 10; number++) {
			if (number%2 == 0) {
				evenNumberTotal += number;
			} else { oddNumberTotal += number;
			}
		}
		System.out.println("짝수의 합계: " + evenNumberTotal);
		System.out.println("홀수의 합계: " + oddNumberTotal);
	}
}

마찬가지로 for문 내부에 if문이 있는 예제이다. 정수 2개를 입력받아 첫 번째 정수부터 두 번째 정수까지의 합계를 계산한다. 입력받은 두 번째 정수가 첫 번째 정수보다 클 때 for문이 실행되고, 그렇지 않은 경우 에러 메세지를 띄운다.

public class ForApp {
	
	public static void main(String[] args) {
		
		// if-else문 내부의 for문
		KeyboardReader keyboard = new KeyboardReader();
		
		System.out.print("첫번째 정수를 입력하세요: ");
		int firstNumber = keyboard.getInt();
		System.out.print("두번째 정수를 입력하세요: ");
		int secondNumber = keyboard.getInt();
		
		if (firstNumber < secondNumber) {
			int total = 0;
			for (int number = firstNumber; number <= secondNumber; number++) {
				total += number;
			}
			System.out.println(firstNumber + " ~ " + secondNumber + "의 합계: " + total);
		} else {
			System.out.println("정수의 범위가 올바르지 않습니다.");
		}
	}
}

break

반복문에서 break문을 만나면 break문이 포함된 블럭을 빠져나온다. 특정 조건을 만족할 때 빠져나오도록 하므로, if문과 함께 사용한다.

public class BreakApp {

	public static void main(String[] args) {

		for (int i = 1; i <= 10; i++) {
			if (i == 6) {
				break;				
			}
			System.out.print(i);
		} 
	}
}
출력

12345

1부터 10까지 순서대로 출력하다 6이 출력될 차례일 때 반복문을 탈출한다.
따라서 1부터 5까지 출력된다.

continue

반복문이 수행되는 도중에 continue문을 만나면 프로그램의 실행흐름이 증감식으로 넘어간다. 즉, 블럭 내 실행문을 수행하지 않고, 다음 반복을 수행한다. 반복을 skip한다고 이해하면 된다. break문과 마찬가지로 특정 조건을 만족할 때 반복을 건너뛰므로 if문과 함께 사용한다

public class ContinueApp {

	public static void main(String[] args) {

		for (int i = 1; i <= 10; i++) {
			if (i == 6) {
				continue;
			}
			System.out.print(i);
		}
	}
}
출력 

1234578910

1부터 10까지 순서대로 출력하다 6이 출력될 차례일 때 반복문을 넘어간다.
따라서 6을 빼고 1부터 10까지 출력된다.


중첩 for

for (int i = 1; i <= 3; i++) {			
	수행문1;
	for (int j = 1; j <= 5; j++) {		
		수행문2;
	}
}
  • 수행문1은 3회 반복되고, 수행문2는 5회 반복된다.
  • 바깥 쪽 for문이 1회 반복될 때, 안 쪽 for문은 5회 반복된다.
  • 바깥 쪽 for문이 끝나면 안 쪽 for문의 j는 초기화 된다.

다음은 중첩 for문을 활용한 예제이다.

#####	
#####		
#####	
#####		
#####	

public class StarDemo1 {

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

public class StarDemo2 {

	public static void main(String[] args) {

		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print("#");
			}
			System.out.println();
		}
	}
}
#####
####
###
##
#

public class StarDemo3 {

	public static void main(String[] args) {

		for (int i = 1; i <= 5; i++) {
			for (int j = 0; j <= 5-i; j++) {
				System.out.print("#");
			}
			System.out.println();
		}
	}
}
    # 
   ##
  ### 
 ####
#####

public class StarDemo4 {

	public static void main(String[] args) {

		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= 5 - i; j++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= i; j++) {
				System.out.print("#");
			}
			System.out.println();
		}
	}
}
#####		
 ####		
  ###		
   ##		
    #	

public class StarDemo5 {

	public static void main(String[] args) {
    
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= i-1; j++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= 6-i; j++) {
				System.out.print("#");
			}
			System.out.println();
		}
	}
}
    #    	
   ###    
  #####  
 ####### 	
#########		
 #######		
  #####		
   ###		
    #		

public class StarDemo6 {

	public static void main(String[] args) {
    
		// 상단
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= 5 - i; j++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= i*2 - 1; j++ ) {
				System.out.print("#");
			}
			System.out.println("");
		}
		// 하단
		for (int i = 1; i <= 4; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= 9 - i*2; j++ ) {
				System.out.print("#");
			}
			System.out.println();
		}
	}
}
1
22
333
4444
55555

public class StarDemo7 {

	public static void main(String[] args) {
    
		int i = 0;
		for (i = 1; i <= 5; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(i);
			}
			System.out.println();
		}
	}
}
1
12
123
1234
12345

public class StarDemo9 {

	public static void main(String[] args) {
    
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(j);
			}
			System.out.println();
		}
	}        
}
0
12
345
6789

public class StarDemo10 {

	public static void main(String[] args) {
    
		int number = 0;
		for (int i = 1; i <= 4; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print(number++);
			}
			System.out.println("");
		}
	}
}
A
BC
DEF
GHIJ
KLMNO

public class StarDemo10 {

	public static void main(String[] args) {
    
		int value = 65;
		
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= i; j++) {
				System.out.print((char)value++);
			}
			System.out.println();
		}
	}
}
    A
   BCD
  EFGHI
 JKLMNOP
QRSTUVWXY

public class StarDemo11 {

	public static void main(String[] args) {

		int value = 65;
		
		for (int i = 1; i <= 5; i++) {
			for (int j = 1; j <= 5 - i; j++) {
				System.out.print(" ");
			}
			for (int j = 1; j <= 2*i - 1; j++) {
				System.out.print((char)value++);
			}
			System.out.println();
		}
	}
}

while

while (조건식) {
		실행문;
}
* 조건식이 true로 판정되면 실행문을 수행한다.
* 조건식이 반복작업의 여부를 결정한다.
* while문은 반복작업을 지속할 지 여부를 알려주는 기능이 제공되는 객체에 대해서 사용한다.
profile
차선이 모여 최선이 된다.

0개의 댓글