- 반복문 중 가장 많이 사용하는 것은 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
## 기본 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의 배수만 잘 반환하는 것이 확인됩니다.
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(); //엔터
}
}
}
- 코드 주석에 설명을 써놨으니 참고해서 봐주세요.
'컴퓨터언어 > JAVA(자바)' 카테고리의 다른 글
[JAVA강좌] 20강 자바기본문법으로 게임제작하기 - 업다운게임 (0) | 2024.01.16 |
---|---|
[JAVA강좌] 19강 반복문관련 - break와 continue (0) | 2024.01.15 |
[JAVA강좌] 17강 반복문 - while과 do while (0) | 2024.01.11 |
[JAVA강좌] 16강 조건문 - switch문 (0) | 2024.01.11 |
[JAVA강좌] 15강 조건문 if문 (0) | 2024.01.11 |