[Java] 제어문

배창민·2025년 9월 8일
post-thumbnail

자바 제어문

1) 조건문 (if / switch)

개요

  • 조건식의 결과(boolean)에 따라 코드 실행 흐름을 제어.
  • 종류: if, if-else, if-else if, switch

if 계열 문법

// if
if (조건식) {
    // 참일 때 실행
}

// if-else
if (조건식) {
    // 참
} else {
    // 거짓
}

// if-else if (여러 분기)
if (조건1) {
} else if (조건2) {
} else {
}

예제 (짝수 판단)

int n = sc.nextInt();
if (n % 2 == 0) System.out.println("짝수");
System.out.println("프로그램 종료");

예제 (학점 분기 – 개선형)

int score = sc.nextInt();
String grade;

if      (score >= 90) grade = "A";
else if (score >= 80) grade = "B";
else if (score >= 70) grade = "C";
else if (score >= 60) grade = "D";
else                  grade = "F";

if ((score >= 60 && score % 10 >= 5) || score == 100) grade += "+";

System.out.println(grade);

switch 문법 & 팁

  • 정수/문자/문자열만 비교(실수·논리 X), 동등 비교만 가능(대소 비교 X).
  • break를 넣지 않으면 fall-through 발생.
switch (op) {
    case '+': result = a + b; break;
    case '-': result = a - b; break;
    case '*': result = a * b; break;
    case '/': result = a / b; break;  // 0 체크 필수!
    case '%': result = a % b; break;
    default : System.out.println("지원하지 않는 연산");
}

2) 반복문 (for / while / do-while)

선택 가이드

문법이런 상황에
for반복 횟수를 알 때, 배열/범위 순회
while조건이 만족할 때까지 반복(입력/파일 처리 등)
do-while최소 1회 실행이 필요한 경우(메뉴, 에코 입력)

for 문법 & 예제

// 기본형
for (int i = 1; i <= 10; i++) {
    // 반복 구문
}

합계 (1~N)

int n = sc.nextInt();
int sum = 0;
for (int i = 1; i <= n; i++) sum += i;
System.out.println(sum);

작은 수 ~ 큰 수 합계

int a = sc.nextInt(), b = sc.nextInt();
int min = Math.min(a, b), max = Math.max(a, b);
int sum = 0;
for (int i = min; i <= max; i++) sum += i;
System.out.println(sum);

구구단 (단 하나)

int dan = sc.nextInt();
if (2 <= dan && dan <= 9) {
  for (int su = 1; su <= 9; su++)
    System.out.println(dan + " * " + su + " = " + dan * su);
} else {
  System.out.println("2~9 사이 정수 입력");
}

구구단 (2~9 전체, 메소드 분리)

for (int dan = 2; dan <= 9; dan++) {
    printGugu(dan);
    System.out.println();
}

static void printGugu(int dan) {
    for (int su = 1; su <= 9; su++)
        System.out.println(dan + " * " + su + " = " + dan * su);
}

while 문법 & 예제

int i = 1;
while (i <= n) {
    // 반복 구문
    i++;
}

문자열 인덱스 순회

String s = sc.nextLine();
int i = 0;
while (i < s.length()) {
    System.out.println(i + " : " + s.charAt(i));
    i++;
}

합계 (1~N)

int n = sc.nextInt(), i = 1, sum = 0;
while (i <= n) sum += i++;
System.out.println(sum);

구구단 (중첩 while)

int dan = 2;
while (dan <= 9) {
    int su = 1;
    while (su <= 9) System.out.println(dan + " * " + su + " = " + dan * su++);
    System.out.println();
    dan++;
}

do-while 문법 & 예제

do {
    // 최소 1회 실행
} while (조건식);

에코 프로그램 (exit 입력 시 종료)

String s;
do {
    s = sc.nextLine();
    System.out.println(s);
} while (!s.equals("exit"));
System.out.println("프로그램 종료");

3) 분기문 (break / continue)

개요

  • break : 반복/스위치 즉시 종료
  • continue : 이번 회차만 건너뛰고 다음 반복으로

break 예제

// 1~100 합 (무한루프 + break)
int i = 1, sum = 0;
while (true) {
    sum += i;
    if (i == 100) break;
    i++;
}
System.out.println(sum);

중첩 반복 + break (5 초과는 스킵)

for (int dan = 2; dan <= 9; dan++) {
    for (int su = 1; su <= 9; su++) {
        if (su > 5) break;         // 안쪽 반복만 종료
        System.out.println(dan + " * " + su + " = " + dan * su);
    }
    System.out.println();
}

라벨 break (바깥 루프까지 종료)

outer:
for (;;) {
    for (int i = 0; i < 10; i++) {
        if (i == 3) break outer;   // 바깥까지 한 번에 탈출
    }
}

continue 예제

// 1~100 중 4와 5의 공배수만 출력
for (int i = 1; i <= 100; i++) {
    if (!(i % 4 == 0 && i % 5 == 0)) continue;
    System.out.println(i);
}

중첩 반복 + continue (짝수 su 건너뛰기)

for (int dan = 2; dan <= 9; dan++) {
    for (int su = 1; su <= 9; su++) {
        if (su % 2 == 0) continue;  // 이번 회차만 스킵
        System.out.println(dan + " * " + su + " = " + dan * su);
    }
    System.out.println();
}

라벨 continue (바깥 루프의 다음 회차로 점프)

outer:
for (int dan = 2; dan <= 9; dan++) {
    for (int su = 1; su <= 9; su++) {
        if (su % 2 == 0) continue outer; // 다음 단로 넘어감
        System.out.println(dan + " * " + su + " = " + dan * su);
    }
    System.out.println();
}

  • 조건 최소화: if-else 사다리가 길면 가드절(빨리 리턴/스킵)로 단순화.
  • switch 안전장치: default 넣고, break 빠뜨리지 않도록 주의.
  • 반복 성능: 반복 내부에서 불변 값은 밖으로 빼기.
  • 입력 예외: 나눗셈은 0 체크, 문자열 비교는 equals.
profile
개발자 희망자

0개의 댓글