본문 바로가기

컴퓨터언어/JAVA(자바)

[JAVA강좌] 18강 반복문 - for문

728x90
반응형

 

 

 

 

 

- 반복문 중 가장 많이 사용하는 것은 for문입니다. 

- while문이 따로 썼던 변수 초기화, 증감식을 조건식과 함께 사용하기 때문입니다. 

- 처음엔 for문이 복잡해서 사용하기 어려울 수 있는데, 익숙해지면 사용이 편리합니다. 

 

 

 

 

 

 

 

1. for문 기본 사용법


 

 

1) for문 문법

## while문 문법

int i = 0; //초기화식

while(i < 10){ //조건식
	반복할 코드
    	i++; //증감식
}

 

- while문의 문법을 보면 초기화식과 증감식을 따로 씁니다. 

- 그래서 코드를 2줄을 더 써야 하는 형태입니다.

 

 

## for문 문법

 for(초기화식;조건식;증감식){
 	반복할 코드;
 }
 
 for(int i=0;i<10;i++){
 	반복할 코드;
 }

 

- for문은 복잡해보이기는 하지만, 한번 터득하면 코드를 줄일 수 있기 때문에 프로그래머들이 선호합니다.

- while문을 써도, for문을 써도 다르진 않습니다.

- 식을 종결을 ; 세미콜론으로 하고 마지막 증감식 뒤에는 붙이지 않습니다.

- 초기화식에는 반복이 시작될 값을 작성, 조건식을 조건이 맞을 마지막값을 적어 조건에 맞게 합니다.

- 증감식은 초기화식 변수값부터 조건 변수값사이를 어떻게 증감할지를 지정하면 됩니다. 

 

- 그럼 지난 강좌에서 했던 간단한 반복을 해보겠습니다.

- 1부터 10까지 반복하는 코드를 해보겠습니다.

- 아래에서는 직접 실습으로 확인해 보겠습니다.

- 패키지(ch12_repeat)과 클래스(Ex04_BasicFor.java)를 추가해 주세요. 

- 기초적 작업을 모르는 분은 아래 주소를 클릭하고 보고 오세요.

https://ossam5.tistory.com/613

 

[JAVA강좌] 1강 JAVA변수와 자료형

1. 프로젝트 패키지 생성 및 자바 파일 생성 - 앞으로의 강좌에서는 패키지 생성 및 자바 파일 생성하는 것을 보여드리진 않겠습니다. - 지금 잘 확인해 주시기 바랍니다. 1) 프로젝트 패키지 생성

ossam5.tistory.com

 

 

 

## 기본 for문 실습1 - Ex04_BasicFor.java

package ch12_repeat;

public class Ex04_BasicFor {

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

- 초기화식, 조건식, 증감식을 한 번에 작성합니다.

- 처음 출력할 값은 1, 마지막에 출력할 값은 10, 1과 10 사이는 1씩 증가하도록 설정합니다.

- 마지막엔 i를 출력했습니다.

 

 

## 기본 for문 결과1 - Ex04_BasicFor.java

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. for문 증감식 활용


- for문 마지막에 작성하는 증감식은 보통 ++을 제일 많이 사용합니다.

- 하지만 거꾸로 처리되어야 할 때는 --를 쓰기도 하며, 복합대입연산자도 사용이 가능합니다.

 

 

1) 역 for문 연습

- 그럼 이번에는 10~0까지 역순으로 반환하는 것을 해보겠습니다. 

 

 

## 역 for문 실습1 - Ex05_BasicFor.java

package ch12_repeat;

public class Ex05_ReverseFor {

	public static void main(String[] args) {
		for(int i=10;i>=0;i--) {
			System.out.println(i);
		}
	}
}

 

- 초기화식, 조건식, 증감식을 한 번에 작성합니다.

- 처음 출력할 값은 10, 마지막에 출력할 값은 0, 10과 0 사이는 1씩 감소(i++)하도록 설정합니다.

- 이때 조건식은 >= 로 0보다 크거나 같을 때만 실행이 되도록 처리해야 합니다. 

- 마지막엔 i를 출력했습니다.

 

 

## 역 for문 결과1 - Ex05_ReverseFor.java

 

 

 


 

 

 

2) 2의 배수 출력 연습

- 그럼 이번에는 2~10사이의 2의 배수만 출력해 보겠습니다.

 

 

## 2의 배수 출력 실습1 - Ex06_EvenFor.java

package ch12_repeat;

public class Ex06_EvenFor {

	public static void main(String[] args) {
		for(int i=2;i<=10;i+=2) {
			System.out.println(i);
		}
	}
}

 

- 초기화식, 조건식, 증감식을 한번에 작성합니다.

- 처음 출력할 값은 2, 마지막에 출력할 값은 10, 2와 10사이는 2씩 증가(i+=2)하도록 처리합니다.

- 증감식에는 ++, -- 뿐만 아니라 복합대입연산자도 사용이 가능합니다.

- 마지막엔 i를 출력했습니다.

 

 

 

## 2의 배수 출력 결과1 - Ex06_EvenFor.java

- 2~10까지의 2의 배수만 잘 반환하는 것이 확인됩니다.

 

 

 

 

 

 

 

 

728x90
반응형

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. for문 요소 생략하기


- for문을 구성하는 요소(초기화식, 조건식, 증감식)는 논리 흐름상 필요가 없다면 생략가능합니다.

 

1) 초기화식 생략

- 이미 위에서 먼저 선언해 놨다면 굳이 또 선언할 필요는 없습니다. 

- 이번에는 i는 1~10까지 변경되고, square 변수에는 i의 제곱값을 받아 출력을 해보겠습니다. 

 

 

 

## 초기화식 생략 for문 실습1 - Ex07_InitialSkip.java

package ch12_repeat;

public class Ex06_InitialSkip {

	public static void main(String[] args) {
		int i = 0, square = 0;

		for(;i<=10;i++) {
			square = i * i;
			System.out.println("i값 : " + i + ", 제곱값 : " + square);
		}
	}
}

- for문 밖에 i라는 변수와 square라는 변수를 미리 선언해 놨습니다.

- 그래서 for의 괄호() 안에 쓸 필요는 없지만, 순서가 있으므로 ; 세미콜론을 통해 첫 번째 것을 생략한다고 적어야 합니다.

 

 

 

## 초기화식 생략 for문 결과1 - Ex07_InitialSkip.java

- 그럼 결과가 잘 나오는 것을 확인할 수 있습니다. 

 

 


 

 

 

2) 조건식 생략

- break라는 키워드를 쓰면 반복문을 벗어날 수 있습니다. 

- 그래서 조건을 생략하면 계속 true가 되면서, if문을 통해 break 키워드를 처리하는 방법도 있습니다.

- 이번에는 0부터 3의 배수만 sum값에 더하고 sum이 100 이상이면 반복을 멈추고 값을 반환해 보겠습니다.

- 그럼 얼마까지 반복해야는 지는 알 수는 없지만 최종값이 100 이상이면 되는 거죠?

 

 

## 조건식 생략 for문 실습1 - Ex08_ConditionSkip.java

package ch12_repeat;

public class Ex08_ConditionSkip {

	public static void main(String[] args) {
		int sum = 0; //더해지는 숫자를 담을 변수
		int count = 0; //몇번 반복했는지 확인해볼 변수
		
		for(int i=0;;i+=3) { //i는 1부터 3씩 증가하지만 몇번 반복할지 모름
			sum += i; //sum변수에 i값을 더하기 대입처리
			count++; //몇번 반복했는지 확인해볼 변수
			if(sum >= 100) { //합계가 100이 넘으면
				//문구를 출력 후
				System.out.println("sum값 : " + sum + ", 반복횟수 : " + count);
				break; //반복문을 벗어나기
			}
		}
	}
}

- 코드에 대한 설명은 주석으로 써 놨으니 확인해 보세요.

- 반복할 횟수를 알 수 없을 때 생략할 수 있습니다.

 

 

## 조건식 생략 for문 결과1 - Ex08_ConditionSkip.java

- 0 + 3 + 6 + 9 + 12 + 15 + 18 + 21 + 24 = 108

- 9번 for문을 실행한 것입니다. 

 

 

 


 

 

 

 

3) 증감식 생략 & 요소 모두 생략

- 이번에는 예제없이 설명만 하고 넘어가겠습니다. 

 

## 증감식 생략 문법

for(int i=0;i<5;){
	반복할 코드
}

 

- 조건식 세미콜론 이후에 아무것도 안 적으면 됩니다.

- 보통 증감연산자나 복합대입연산자는 간단해서 적지만 수식이 복잡해지는 경우는 생략합니다.

- 그리고 for문 안에 수식을 작성해서 처리하면 됩니다. 

- 하지만 이런 경우는 while문을 쓰는 것이 더 합리적이긴 합니다. 

 

 

## 요소모두생략

for(;;){
	//반복할 코드
}

 

- 이렇게 작성하면 무한반복입니다.

- 하지만 역시 이렇게 작성할 거면 while문으로 쓰는 것이 더 합리적입니다.

 

while(true){
	반복할 코드;
}

 

 

 

 

 

 

 

 

 

 

 

4. 중첩 for문


- if문에서도 중첩 if문을 사용한 적이 있습니다. 

- for문도 마찬가지로 중첩해서 사용이 가능합니다.

- 이때 주의할 것은 중첩되는 for의 변수는 같으면 안 된다는 것입니다. 

 

 

##문법

for(int i=0;i<5;i++){
	for(int j=0;j<5;j++){
    
    	}
}

 

- 이렇게 중첩적으로 사용할 수 있습니다.

- 변수는 프로그래머들이 관례상 i, j ,k ... 순으로 처리를 합니다. 

- 보통 중첩 for문은 변화되는 변수가 2개 이상이면 사용하면 됩니다. 

 

 

 

 

1) 기본 중첩 for문 예제 해보기

- 그럼 1학년 1반부터 3학년 9반까지 출력하는 프로그램을 만들어보겠습니다. 

===1학년 출력===
1학년 1반
1학년 2반
...
3학년 9반

 

- 여기서 변하는 값은 학년과 반입니다. 그래서 중첩 for문을 써야 합니다. 

 

 

## 조건식 생략 for문 실습1 - Ex09_OverlapFor.java

package ch12_repeat;

public class Ex09_OverlapFor {

	public static void main(String[] args) {
		for(int i=1;i<=3;i++) { //학년반복
			//학년출력
			System.out.println("===" + i + "학년 출력===");
			
			for(int j=1;j<=9;j++) { //반을 반복
				//학년반 출력
				System.out.println(i + "학년 " + j + "반");
			}
		}
	}
}

- 학년은 i변수로 관리하고, 반은 j변수로 관리를 합니다. 

- 코드에 설명을 써놨으니 확인을 해보세요.

 

 

 

## 조건식 생략 for문 출력1 - Ex09_OverlapFor.java

- 그럼 학년과 반이 모두 다 반복돼서 출력되는 것을 확인할 수 있습니다. 

 

 

- 그럼 위에서 배운 내용을 종합해서 구구단을 한번 제작해 보세요.

===2단 출력===
2 x 1 = 2
2 x 2 = 4
...
9 x 9 = 81

- 더보기는 혼자 먼저 풀어본 후 열어봐 주세요.

 

 

더보기

## 구구단 실습1 - Ex10_OverlapFor.java

package ch12_repeat;

public class Ex10_MultiplicationTable {

	public static void main(String[] args) {
		for(int i=2;i<=9;i++) { //단을 반복 : 2~9
			System.out.println("===" + i + "단 출력==="); //단출력
			
			for(int j=1;j<=9;j++) { //곱하는 수를 반복 : 1~9
				//2 x 1 = 2 식으로 출력
				System.out.println(i + " × " + j + " = " + (i * j));
			}
		}
	}
}

- 코드에 대한 설명은 주석으로 처리했습니다. 

 

 

## 구구단 출력 1 - Ex10_OverlapFor.java

 - 뒷부분은 조금 잘렸지만 9단까지 잘 출력되는 것을 확인할 수 있습니다. 

 

 

 

 


 

 

 

 

 

2) 별 그려보기

- 어떤 자바나 컴퓨터 언어 강좌를 공부를 해도 꼭 나오는 별출력을 해보겠습니다. 

 

## for문 별출력 결과1 - Ex11_Star1.java

 

- 결과 먼저 보겠습니다.

- 줄은 최종적으로 5개고, 별도 1~5개로 줄별로 출력이 되면 됩니다.

- 별은 ㅁ누르고 한자키를 누르면 여러 특수문자 중 찾을 수 있습니다.

 

 

 

## for문 별출력 코드1 - Ex11_Star1.java

package ch12_repeat;

public class Ex11_Star1 {

	public static void main(String[] args) {
		for(int i=1;i<=5;i++) { //줄을 반복 : 1~5
			for(int j=1;j<=i;j++) { //별출력수 반복 : 1~5 / j<=i
				System.out.print("★"); //엔터없이 별출력
			}
			System.out.println(); //엔터 출력 - 줄처리
		}
	}
}

 

- 줄은 1~5까지 반환하고, 별도 1~5개로 반환됩니다. 

- 그래서 결국 i의 개수와 같게 처리를 해야 합니다. 

- j<=i 보다 작거나 같아야 같은 수로 반복이 됩니다.

 

 

 

 

- 그럼 문제를 내볼 테니 한번 풀어보시길 바랍니다.

- 더보기는 다 풀고 봐주세요.

 

 

 

더보기

## for문 별출력 코드2 - Ex11_Star2.java

package ch12_repeat;

public class Ex11_Star1 {

	public static void main(String[] args) {
		for(int i=1;i<=5;i++) { //줄 출력
			//공백은 5-i개 출력 : 4,3,2,1,0
			for(int j=1;j<=5-i;j++) {
				System.out.print(" ");
			}
			//*은 2*i-1개 : 1,3,5,7,9
			for(int j=1;j<=(2*i)-1;j++) {
				System.out.print("★");
			}
			
			System.out.println(); //엔터
		}
	}
}

 

- 코드 주석에 설명을 써놨으니 참고해서 봐주세요.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형