JAVA/조건문(if, switch)과 반복문(for, while)

[JAVA] for문

prize1209 2021. 6. 10. 21:20

0. 반복문

문장 또는 문장들을 반복해서 수행할 때 사용한다. 종류로는 for문, while문, do-while문이 있다.

조건식과 수행할 블럭{} 또는 문장으로 구성

 

반복회수가 중요한 경우에 for문을 그 외에는 while문을 사용한다.

for문과 while문은 서로 변경가능하다.

 

for문이나 while문에 속한 문장은 조건에 따라 한번도 수행되지 않을 수도 있다. 

그러나 do-while문은 while문의 변형으로 블럭{}이 최소한 한번은 수행될 것을 보장한다.

 

1. for문

for문은 반복횟수를 알고 있을 때 사용한다. 

 

변수 i에 1을 저장한 다음, 매 반복마다 i의 값을 1씩 증가시킨다. 그러다 i 의 값이 5를 넘으면 조건식이 거짓이 되어 반복을 마친다. 

 

 

for문의 구조와 수행순서 

'초기화', '조건식', '증감식', '블럭{}' 모두 4부분으로 이루어져 있다.

 

 

초기화

반복문에 사용될 변수를 초기화하는 부분. 한 번만 수행된다. 보통 변수 하나로 for 문을 제어하지만, 둘 이상의 변수를 사용할 때는 , 로 구분해서 사용하면 된다. 

 

for(int i=1, j=0; i<=10; i++){...}

  

조건식

조건식이 true면 반복 계속, false면 반복을 중단하고 for문을 빠져나간다. 

 

증감식

반복문을 제어하는 변수의 값을 증가 또는 감소시키는 식이다. 증감식에 의해 변수 값이 변하다가 조건식이 거짓이 되면 for문을 빠져나간다. 

 

for(int i=1; i<=10; i++){...} //1부터 10까지 1씩 증가 
for(int i=1; i<=10; i--){...} //1부터 10까지 1씩 감소
for(int i=1; i<=10; i+=2){...} //1부터 10까지 2씩 증가 
for(int i=1; i<=10; i*=3){...} //1부터 10까지 3배씩 증가 

 

증감식도 쉼표를 이용해서 두 문장 이상을 하나로 연결해서 쓸 수 있다.

 

public class FlowExTest {
	public static void main(String[] args) {
		for (int i = 1, j = 10; i <= 10; i++, j--) {
			System.out.println("i="+i+"j="+j);

		}

	}
}

또한 초기화, 조건식, 증감식 모두 생략도 가능하다. 조건식은 참이 된다.

for(; ;){...}

 

 

 

예12)

public class FlowEx12 {
	public static void main(String[] args) {
		for(int i=1; i<=5; i++) 
			System.out.println(i); //i의 값을 출력한다.
		
		for(int i=1; i<=5; i++) 
			System.out.print(i); //print를 쓰면 가로로 출력
		}
		
	}

 

{}가 없는 데도 사용이 가능한 것인가?? 궁금하다 .

 

 

 

예13)

public class FlowEx13 {
	public static void main(String[] args) {
		int sum=0;  //합계를 저장하기 위한 변수
		
		for(int i=1; i<=10; i++) {
			sum+=i; //sum=sum+i;
			System.out.printf("1부터 %2d까지의 합:%2d%n",i,sum);
		}		
	}
}

%2d : 정수의 최대 2 자리를 인쇄한다.

 

i sum=sum+i
1 1=0+1
2 3=1+2
3 3+3
4 6+4
5 10+5
6 21=15+6
7 28=21+7
8 36=28+8
9 45=36+9
10 55=45+10

 

 

예14)

public class FlowEx14 {
	public static void main(String[] args) {
		for(int i=1, j=10; i<=10; i++, j--) {
			System.out.printf("%d \t %d%n", i, j);
		}
	}
}

 

j 를 쓰지 않고 i하나만 써서 똑같이 출력하기

 

i와 j의 값을 더한 것이 11이므로 j대신 11-i로 쓸 수 있다. 

public class FlowEx14 {
	public static void main(String[] args) {
		for(int i=1; i<=10; i++) {
			System.out.printf("%d \t %d%n", i, 11-i);
		}
	}
}

 

 

예15)

public class FlowEx15 {
	public static void main(String[] args) {
		System.out.println("i \t 2*i \t 2*i-1 \t i*i \t 11-i \t i%3 \t i/3");
		System.out.println("-----------------------------------------------------");
		for(int i=1; i<=10; i++) {
			System.out.printf("%d \t %d \t %d \t %d \t %d \t %d \t %d%n", i, 2*i, 2*i-1, i*i, 11-i, i%3, i/3);
		}
	}
}