💛 반복문(Iteration)
: 작업이 반복적으로 수행되도록 할 때 사용
for문 + while문 + do-while문
for문
: 반복횟수를 알고 있을 때 사용
while문
: 반복횟수를 모를 때 사용
💛 for문
- 조건식 True인 동안 → 블럭 { } 문장들을 반복
- 조건식 False → 반복문 벗어남
for (초기화; 조건식; 증감식) {
// 조건식이 True일 동안 수행될 문장
}
class Iteration1 {
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
System.out.println("Hello, Mallang!");
}
}
}
초기화, 조건식, 증감식 → 모두 생략가능 ✅
조건식 생략 → True로 간주 ➡️ 무한반복문 주의 🚨
반복문에 사용될 변수 → 초기화하는 부분
처음에 한번만 수행됨 ✅
보통 변수 1개, but 여러개도 가능
for (int i = 1; i <= 10; i++) {} // 초기화변수 1개
for (int i = 1, j = 0; i <= 10; i++) {} // 초기화변수 2개
조건식 값 | 수행 |
---|---|
True | 계속 반복 수행 |
False | 반복중단 → for문 벗어남 |
반복문을 제어하는 변수 값 → 증가 or 감소
매 반복마다 변수값 증감 → 조건식 False ➡️ for문 벗어남
for (int i = 1; i <= 10; i++) {} // 1 ~ 10 1씩증가
for (int i = 10; i >= 1; i--) {} // 10 ~ 1 1씩감소
for (int i = 1; i <= 10; i += 2) {} // 1 ~10 2씩증가
for (int i = 1; i <= 10; i *= 3) {} // 1 ~ 10 3배씩증가
class Iteration2 {
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
for (int i = 1; i <= 5; i++) {
System.out.print(i); // 가로출력
}
System.out.println();
}
}
class Iteration3 {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 5; i++) {
sum += i;
// %2d -> 2자리 10진정수
System.out.printf("1부터 %2d 까지의 합 : %2d%n", i, sum);
}
}
}
💛 중첩 for문
: for문 안에 또다른 for문 포함시키는 것
class Iteration4 {
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();
}
}
}
💛 while문
: 조건이 True인 동안 (조건식이 False될 때까지) → 블럭 { } 내 문장 반복
while (조건식) {
// 조건식 연산결과 → True인동안, 반복될 문장
}
조건식 True → 블럭 { } 안으로 들어감
조건식 False → while문
벗어남
블럭 { } 수행 → 다시 조건식으로 돌아감
반복문 | 차이점 |
---|---|
for문 | 변수 if로 반복횟수 지정 → 반복때마다 { } 내용수행 |
while문 | 조건식 True인 동안 → { } 내용 반복수행 |
class Iteration5 {
public static void main(String[] args) {
int i = 5; // 초기화
while (i-- != 0) { // 조건식 (후위형)
// 조건식에서 평가된 후 -> 1감소하여 i 출력됨
System.out.println(i + " - I can do it!");
}
}
}
class Iteration6 {
public static void main(String[] args) {
int num = 0, sum = 0;
System.out.print("숫자를 입력하시오 (ex. 12345) >>> ");
Scanner scanner = new Scanner(System.in);
String userData = scanner.nextLine();
num = Integer.parseInt(userData);
// num % 10 -> 마지막자리 출력
// num / 10 -> 마지막자리 제거
while (num != 0) {
sum += num % 10;
System.out.printf("sum = %3d num = %d%n", sum, num);
num /= 10;
}
System.out.println("각 자리수 합 : " + sum);
}
}
💛 do-while문
: while문 변형 → 조건식과 블럭 { } 순서를 바꿔놓은 것
do {
// 조건식 연산결과 True일때, 수행될 문장
// 처음 한번은 무조건 실행됨
} while (조건식);
블럭 { } 무조건 한번 실행 → 조건식 평가
while문
→ 조건식 결과에 따라, 블럭 { } 한번도 실행 안될 수 있음 ⛔️
do-while문
→ 조건식 결과와 상관없이, 블럭 { } 최소한 한번 수행 보장 ✅
class Iteration7 {
public static void main(String[] args) {
int input = 0, answer = 0;
// 1~100 난수 저장
answer = (int)(Math.random() * 100) + 1;
Scanner scanner = new Scanner(System.in);
do {
System.out.print("1과 100사이의 정수를 입력하시오 >>> ");
input = scanner.nextInt();
if (input > answer) {
System.out.println("더 작은수로 다시 시도하시오.");
} else if (input < answer) {
System.out.println("더 큰수로 다시 시도하시오.");
}
} while (input != answer);
System.out.println("정답입니다!");
}
}
💛 break문
: 자신이 포함된 가장 가까운 반복문을 벗어남
무한반복문 → 주로 if문
과 함께 사용
➡️ 특정조건 만족 시, 반복문 벗어남
무한반복문 → 조건문
+ break문
함께 사용
class Iteration8 {
public static void main(String[] args) {
int sum = 0;
int i = 0;
while (true) { // 무한반복
if (sum > 100) // 조건문 + break문 -> 무한반복 벗어남
break;
++i;
sum += i;
}
System.out.println("i = " + i);
System.out.println("sum = " + sum);
}
}
💛 continue문
- 반복문 내에서만 사용
- 반복문 진행 중 continue문 → 반복문 끝으로 이동 → 다음 반복으로 넘어감
반복문 전체를 벗어나지 않음 ⛔️, 다음 반복을 계속 수행 ✅
➡️ break문
과의 차이점
if문
특정조건 만족 → continue문
이후 문장 수행 ❌ → 다음반복으로 넘어감
전체 반복 중, 특정조건을 만족하는 경우를 제외하고자할 때 유용 ⭐️
반복문종류 | 이동목적지 |
---|---|
for문 | 증감식으로 이동함 |
while, do-while문 | 조건식으로 이동함 |
class Iteration9 {
public static void main(String[] args) {
int menu = 0;
int num = 0;
Scanner scanner = new Scanner(System.in);
while (true) { // 무한반복문
System.out.println("(1) square");
System.out.println("(2) square root");
System.out.println("(3) log");
System.out.print("원하는 메뉴 (1 ~ 3)를 선택하시오 (종료 : 0) >>> ");
String userData = scanner.nextLine();
menu = Integer.parseInt(userData);
if (menu == 0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (! (1 <= menu && menu <= 3)) {
System.out.println("메뉴를 잘못 선택하셨습니다. (종료 : 0)");
continue;
}
System.out.println("선택하신 메뉴는 " + menu + "번 입니다.");
}
}
}
💛 이름붙은반복문
: 중첩반복문, break문, continue문 → 이름지정
break문
: 근접한 단 하나의 반복문만 벗어남
여러개의 반복문이 중첩된 경우 → break문
으로 완전히 벗어날 수 없음
중첩반복문
, break문
, continue문
이름지정 → 하나 이상의 반복문 벗어나거나 건너뜀
class Iteration10 {
public static void main(String[] args) {
Loop1 : for (int i = 2; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if (j == 5) {
break Loop1;
}
System.out.println(i + "*" + j + "=" + i*j);
}
}
}
}
class Iteration11 {
public static void main(String[] args) {
int menu = 0, num = 0;
Scanner scanner = new Scanner(System.in);
// while문 : outer
outer:
while (true) {
System.out.println("(1) square");
System.out.println("(2) square root");
System.out.println("(3) log");
System.out.print("원하는 메뉴 (1 ~ 3)를 선택하시오 (종료 : 0) >>> ");
String userData = scanner.nextLine();
menu = Integer.parseInt(userData);
if (menu == 0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (! (1 <= menu && menu <= 3)) {
System.out.println("메뉴를 잘못 선택하셨습니다. (종료 : 0)");
continue;
}
// 무한반복문
for (;;) {
System.out.print("계산할 값을 입력하시오 (계산종료 : 0, 전체종료 : 99) >>> ");
userData = scanner.nextLine();
num = Integer.parseInt(userData);
if (num == 0) {
break; // for문만 벗어남
}
if (num == 9) {
break outer; // for문, while문 모두 벗어남
}
switch (menu) {
case 1:
System.out.println("result = " + num * num);
break;
case 2:
System.out.println("result = " + Math.sqrt(num));
break;
case 3:
System.out.println("result = " + Math.log(num));
break;
}
}
}
}
}