반복문
특정 조건을 만족하는 동안 실행문을 반복되도록 하는 for 문과 while 문에 대해 알아봅니다.
목 차
🧩1. for문 구조
🧩2. for문 사용 예시
🧩3. while문 구조
🧩4. while문 사용 예시
🧩5. do - while문 구조
🧩6. do - while문 사용 예시
🧩7. Break와 Continue
🧩1. for문 구조
for (변수선언; 조건식; 증감식) { 실행문 }
- for 문은 변수가 조건을 만족하는 동안 증감하면서 실행됩니다.
- for 문안에 선언되는 변수, 조건식은 ;(세미콜론)으로 닫아줘야합니다.
- 변수 증감식 뒤에는 ;(세미콜론)을 사용하지 않습니다.
- 실행문은 { } 대괄호로 감쌉니다.
- 실행 순서는 1회차는 초기 변수 선언 ➡️ 조건식 ➡️ 실행문 입니다
- 2회차 부터는 증감식 ➡️ 조건식 ➡️ 실행문 ↩️ 반복 실행됩니다.
public class ForTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
}
}
🧩2. for문 사용 예시
for문 변수 증감과 연산
- for 문이 1~9까지 반복되는 동안 숫자 2와 곱셈을 연산하고 출력합니다.
public class ForTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
}
}
#출력된 값
2x1=2
2x2=4
2x3=6
2x4=8
2x5=10
2x6=12
2x7=14
2x8=16
2x9=18
- for 문을 중첩하여 2~9단까지 출력합니다.
- print 문은 옆으로 출력이되고, println문은 줄바꿈이 일어납니다.
- \t는 tab 탭만큼 간격을 띄어 출력합니다.
public class ForTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 2; i <= 9; i++) {
System.out.println(i + "단");
for (int j = 1; j <= 9; j++) {
int multi = i * j;
System.out.print(i + "x" + j + "=" + multi + "\t");
}
System.out.println();
System.out.println();
}
}
}
#출력된 값
2단
2x1=2 2x2=4 2x3=6 2x4=8 2x5=10 2x6=12 2x7=14 2x8=16 2x9=18
3단
3x1=3 3x2=6 3x3=9 3x4=12 3x5=15 3x6=18 3x7=21 3x8=24 3x9=27
4단
4x1=4 4x2=8 4x3=12 4x4=16 4x5=20 4x6=24 4x7=28 4x8=32 4x9=36
5단
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25 5x6=30 5x7=35 5x8=40 5x9=45
6단
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36 6x7=42 6x8=48 6x9=54
7단
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49 7x8=56 7x9=63
8단
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64 8x9=72
9단
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
- 구구단을 세로로 보기 좋게 출력합니다.
public class ForTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
for (int i = 1; i <= 9; i++) {
for (int j = 2; j <= 9; j++) {
int multi = i * j;
System.out.print(j + "x" + i + "=" + multi + "\t");
}
System.out.println();
}
}
}
#출력된 값
2x1=2 3x1=3 4x1=4 5x1=5 6x1=6 7x1=7 8x1=8 9x1=9
2x2=4 3x2=6 4x2=8 5x2=10 6x2=12 7x2=14 8x2=16 9x2=18
2x3=6 3x3=9 4x3=12 5x3=15 6x3=18 7x3=21 8x3=24 9x3=27
2x4=8 3x4=12 4x4=16 5x4=20 6x4=24 7x4=28 8x4=32 9x4=36
2x5=10 3x5=15 4x5=20 5x5=25 6x5=30 7x5=35 8x5=40 9x5=45
2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 7x6=42 8x6=48 9x6=54
2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 8x7=56 9x7=63
2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 9x8=72
2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
- 1부터 순차적으로 더해서 처음으로 합계가 20을 넘을 때 합계와 회차를 출력할 수 있습니다.
import java.util.Scanner;
public class ControlTest3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum = 0, i;
int target = 20;
for (i = 1; sum < target; i++) {
sum += i;
}
System.out.println("sum =" + sum + ", i=" + (i - 1));
}
}
#출력된 값
sum =21, i=6
- 사용자로 부터 입력 받은 수의 합이 목표값(target)을 넘을때 합계와 회차를 출력합니다.
import java.util.Scanner;
public class ControlTest3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int count = Integer.parseInt(input);
int sum = 0;
int target = 20;
for (int i = 1; i < count; i++) {
sum += i;
if (sum >= target) {
System.out.println("sum =" + sum + ", i=" + i);
// break;
}
}
System.out.println("종료");
}
}
#출력된 값
20
sum =21, i=6
sum =28, i=7
sum =36, i=8
sum =45, i=9
sum =55, i=10
sum =66, i=11
sum =78, i=12
sum =91, i=13
sum =105, i=14
sum =120, i=15
sum =136, i=16
sum =153, i=17
sum =171, i=18
sum =190, i=19
종료
- 홀수는 양수(1), 짝수는 음수(-2)일때 순차적 합계가 처음 100이 될 때의 회차를 구하는 식입니다.
public class ControlTest6 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int sum = 0, i;
for (i = 1; sum < 100; i++) {
if (i % 2 == 0) {
sum += i * (-1);
} else {
sum += i;
}
}
System.out.println("sum =" + sum + ", i=" + (i - 1));
}
}
#출력된 값
sum =100, i=199
🧩3. While문 구조
while (조건식) { 실행문; 변수 증감; }
- while 문 또한 변수가 조건을 만족하는 동안 증감하면서 실행됩니다.
- 단 변수의 증감은 실행문 내에서 이루어집니다.
- 실행문과 변수 증감은 모두 ;(세미콜론)으로 닫아줘야합니다.
public class WhileTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i = 1;
while (i <= 9) {
System.out.println(i);
i++;
}
}
}
🧩4. While문 사용 예시
while문 실행과 변수의 증감
- while 문을 중첩하여 2~9단까지 출력합니다.
- 실행문이 끝나는 지점에서 (i++, j++) 변수를 증가시켜줍니다.
public class WhileTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int j, i = 1;
while (i <= 9) {
j = 2;
while (j <= 9) {
int multi = i * j;
System.out.print(j + "x" + i + "=" + multi + "\t");
j++;
}
i++;
System.out.println();
}
}
}
#출력된 값
2x1=2 3x1=3 4x1=4 5x1=5 6x1=6 7x1=7 8x1=8 9x1=9
2x2=4 3x2=6 4x2=8 5x2=10 6x2=12 7x2=14 8x2=16 9x2=18
2x3=6 3x3=9 4x3=12 5x3=15 6x3=18 7x3=21 8x3=24 9x3=27
2x4=8 3x4=12 4x4=16 5x4=20 6x4=24 7x4=28 8x4=32 9x4=36
2x5=10 3x5=15 4x5=20 5x5=25 6x5=30 7x5=35 8x5=40 9x5=45
2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 7x6=42 8x6=48 9x6=54
2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 8x7=56 9x7=63
2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 9x8=72
2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
- 같은 방법으로 사용자로부터 입력을 받아 *(아스타)키를 가로 세로 같은 수만큼 출력할 수 있습니다.
import java.util.Scanner;
public class ContolTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int count = Integer.parseInt(input);
int i = 1;
while (i <= count) {
int j = 1;
while (j <= count) {
System.out.print("*");
j++;
}
i++;
System.out.println();
}
}
}
#출력된 값
5
*****
*****
*****
*****
*****
- 입력은 수만큼 *(아스타)키로 삼각형을 만들 수 있습니다.
import java.util.Scanner;
public class ContolTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int count = Integer.parseInt(input);
int i = 1;
int k = count;
while (i <= count) {
while (k <= count) {
System.out.print("*");
k++;
}
k = count - i;
i++;
System.out.println();
}
}
}
#출력된 값
5
*
**
***
****
*****
- 같은 방법으로 *(아스타)키로 역 삼각형을 만들 수 있습니다.
import java.util.Scanner;
public class ContolTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int count = Integer.parseInt(input);
int i = 0;
int k = 0;
while (i <= count) {
while (k <= count) {
System.out.print("*");
k++;
}
k = i + 1;
i++;
System.out.println();
}
}
}
#출력된 값
5
******
*****
****
***
**
*
- 이번에는 *(아스타)키로 반전된(공백으로 채워진) 삼각형을 만들 수 있습니다.
import java.util.Scanner;
public class ContolTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int count = Integer.parseInt(input);
int i = 1;
int j = 1;
int k = count;
while (i <= count) {
// 공백 반복
while (j < count) {
System.out.print(" ");
j++;
}
// 아스카 반복
while (k <= count) {
System.out.print("*");
k++;
}
k = count - i;
j = i + 1;
i++;
System.out.println();
}
}
}
#출력된 값
10
*
**
***
****
*****
******
*******
********
*********
**********
- 다음과 같이 *(아스타)키로 반전된(공백으로 채워진) 삼각형을 만들 수도 있습니다.
import java.util.Scanner;
public class ContolTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
int count = Integer.parseInt(input);
int i = 0;
int j = 1;
int k = 0;
while (i <= count) {
// 공백 반복
while (j < count) {
System.out.print(" ");
j++;
}
// 아스카 반복
while (k <= count) {
System.out.print("*");
k++;
}
k = i + 1;
j = i + 1;
i++;
System.out.println();
}
}
}
#출력된 값
5
*
**
***
****
*****
🧩5. Do - While문 구조
Do { 실행문; } while (조건식);
- while문의 경우 조건이 만족하지 않는다면 한번도 반복하지 않을 수 있지만, do while문의 경우는 무조건 한번은 실행되는 반복문입니다.
- 즉, do 실행문을 실행한 후 그 결과에 따르 while 문을 실행할지 여부를 결정할 때 사용합니다.
- while(조건식) 뒤에 ;(세미콜론)으로 닫아줍니다.
import java.util.Scanner;
public class DoWhileExam {
public static void main(String[] args) {
int value = 0;
// Scanner는 java.util 패키지에 있는 클래스로써 키보드로 부터 값을 입력받는다던지 할 때 유용하게 사용할 수 있는 클래스입니다.
Scanner scan = new Scanner(System.in);
// 위 처럼 작성하시면 키보드로부터 값을 입력받을 수 있는 Scanner객체가 생성됩니다.
do {
value = scan.nextInt(); // Scanner클래스를 이용하여 키보드로 부터 숫자값을 입력받습니다.
System.out.println("입력받은 수 : " + value);
} while (value != 10); // 입력받은 값이 10이 아닐 경우에는 계속 반복합니다.
System.out.println("반복문 종료");
}
}
🧩6. Do - While문 사용 예시
1회 실행 후 조건식 검사
- 1~5까지만 입력을 받고 그 외에는 다시 입력 하도록 하는 예시 입니다.
import java.util.Scanner;
public class DoWhileTest1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int select;
String input;
do {
System.out.println("input :");
input = sc.nextLine();
select = Integer.parseInt(input); // select 1~5만 입력가능, 아니면 다시 입력받기
} while (select < 1 || select > 5);
System.out.println("select : " + select);
}
}
🧩7. Break와 Continue
조건문의 실행 여부를 결정합니다.
- 반복문이 중첩되어 있을 경우 break; 문은 가장 가까운 반복문만 종료합니다.
- 바깥쪽 반복문까지 종료시키려면 반복문에 이름(라벨)을 붙이고, “break 이름;” 사용합니다.
#반복문 종료
for (...) {
for (...) {
break;
}
}
#라벨 사용시
Label: for (...) {
for (...) {
break Label;
}
}
- Continue문은 for문, while문, do-while문에서 사용합니다.
- for문에서는 증감식으로 이동하고, while문과 do-while문에서는 조건식으로 이동합니다.
- 2로 나눈 나머지가 0이 아닌 경우, 즉 홀수인 경우 for 문의 증감식으로 이동합니다. 따라서, 홀수는 출력되지 않습니다.
#
for (int i=1; i<=10; i++) {
if(i%2 !=0) {
continue;
}
System.out.println(i)
}
0 댓글