본문 바로가기
Java(17+) 문법/Java 기본

[Java] 제어문

by cogito21_java 2025. 1. 21.
반응형

- 문(statements): 프로그램의 실행 단위. 컴퓨터에게 내리는 명령

- 프로그램(program): 문들이 모인 것

- 프로그래밍(programming): 문을 순서에 맞게 나열한 것

- 제어구조(control structure): 프로그래므이 실행 순서나 흐름을 제어하는 것

- 제어문(control flow statements): 제어 구조를 가지고 있는 문

- 조건문(conditional statements): 조건을 만족하는지 하지 않는지에 따라 선택적으로 실행하고자 할 떄 사용되는 문장

- 반복문(iteration statements): 조건에 따라 특정 동작을 반복할 때 사용

- 조건문에는 if문과 switch-case문이 있고, 반복문에는 for문과 while문이 있다.

- break, continue를 사용하여 반복문을 멈추거나 돌아갈 수 있다.


조건문

if문

- 논리 연산이나 비교 연산의 결과로 true 또는 false가 나오면 이 값을 기준으로 코드를 실행할지 하지 않을지를 제어하는 조건문

- 논리값에는 true와 false이외에 boolean으로 결과가 나오는 비교 연산이나 논리 연산도 들어갈 수 있다

- 순서 주의

- if문은 각각 모두 실행되지만 if-else문, if-else if-else문은 조건중 1개만 실행

더보기

if문

if (논리값) {
    논리값이 true일 때 실행되는 코드;
}

if-else문

if (논리값) {
    논리값이 true일 때 실행되는 코드;
} else {
    논리값이 false일 때 실행되는 코드;
}

if-else if-else문

if (논리값1) {
    논리값1이 true면 실행되는 코드;
} else if (논리값2) {
    논리값2이 true면 실행되는 코드;
} else if (논리값3) {
    논리값3이 true면 실행되는 코드;
} else {
    논리값이 모두 false면 실행되는 코드;
}

if문 예시 (true, false)

더보기
public class Main {
    public static void main(String[] args) {
        if (true) {
            System.out.println("always execute(true)");
        }
        if (false) {
            System.out.println("always execute(false)");
        }
    }
}

if문 예시 (비교 연산)

더보기
public class Main {
    public static void main(String[] args) {
        int age = 20;
        boolean isAdult = age >= 19;
        if (isAdult) {
            System.out.println("Adult");
        }
        
        if (age < 19) {
            System.out.println("Teenager");
        }
    }
}

if문 예시 (논리 연산)

더보기
public class Main {
    public static void main(String[] args) {
        int x = 3;
        int y = -1;
        
        if (x > 0 && y > 0) {
            System.out.println("x and y are positive");
        }
        
        if (x > 0 || y > 0) {
            System.out.println("x or y is positive");
        }
        
        if (!(x >= 0)) {
            System.out.println("x is negative");
        }
    }
}

if-else문 예시

더보기
boolean check = false;

if (check) {
    System.out.println("true");
} else {
    System.out.println("false");
}

예제

숫자를 입력받아 홀수와 짝수를 판단하는 프로그램을 작성하시오.

풀이

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        String line = sc.next();
        int num = Integer.parseInt(line);

        if (num % 2 == 0) {
            System.out.println("Even");
        } else {
            System.out.println("Odd");
        }
    }
}

 

switch-case문

- 한 개의 값을 가지고 여러 개의 조건을 묶어서 처리할 때 사용하는 조건문

- 실행중 break를 만나면 코드 결과 종료. break가 없는 경우 순서대로 실행

- 변수나 식의 결과로 byte, short, char, int, enum, String만 가능. boolean과 float, double, 참조 타입 불가능

- 표현식(expression)은 값이나 변수, 연산자의 조합이며 조합은 하나의 값으로 평가. 평가란 값을 생성, 반환 ,대입, 참조하는 것

더보기

switch-case문

switch (변수 or 식) {
    case 값1:
        변수 또는 식의 결과가 값1과 동일하면 실행할 코드;
        break;
    case 값2:
        변수 또는 식의 결과가 값1과 동일하면 실행할 코드;
        break;
    ...
    case 값n-1:
    case 값n:         // case 값n-1, 값n과 동일
        변수 또는 식의 결과가 값n-1 또는 값n과 동일하면 실행할 코드;
        break;
    default:
        해당할 값이 없는 경우 실행할 코드
        break;


}

switch 표현식(Java 14+): break를 사용하지 않고 : 대신 화살표 연산자 사용. 변수에 바로 대입 가능

type var_name = switch(변수 or 식) {
    case 조건1 -> 변수 또는 식의 연산 결과가 조건1에 해당하는 경우 실행할 코드;
    case 조건2, 조건3 -> 변수 또는 식의 연산 결과가 조건2 또는 조건3에 해당하는 경우 실행할 코드;
    default -> 해당하는 값이 없는 경우 실행할 코드;
}

switch-case문 예시

더보기
public class Main {
    public static void main(String[] args) {
        int dayOfWeek = 5;
        
        switch (dayOfWeek) {
            case 1: 
                System.out.println("Monday");
                break;
            case 2: 
                System.out.println("Tuesday");
                break;
            case 3: 
                System.out.println("Wednesday");
                break;
            case 4: 
                System.out.println("Thursday");
                break;
            case 5: 
                System.out.println("Friday");
                break;
            case 6: 
                System.out.println("Staturday");
                break;
            case 7: 
                System.out.println("Sunday");
                break;
			default:
                System.out.printlne("Invalid Number");
        }
    }
}

switch 표현식 예시

더보기
public class Main {
    public static void main(String[] args) {
        int month = 11;
        int lastDate = switch (montn) {
            case 1, 3, 5, 7, 8, 10, 12 -> 31;
            case 4, 6, 9, 11 -> 30;
            case 2 - > 28;
            default -> throw new IllegalArgumentException("Invalid Month: " + month);
        };
        System.out.println(lastDate);
    }
}

예제

입력한 요일에 맞추어 운영과 휴무 여부를 알려주세요.
1-5(정상 영업), 6-7(휴일)

 

풀이

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Input Day of Week. (1:Monday, 7:Sunday)");
        int day = sc.nextInt();
        String state = "정상영업";
        switch (day) {
            case 1, 2, 3, 4, 5: state = "정상 영업"; break;
            case 6, 7: state = "휴일"; break;
            default: throw new IllegalArgumentException("Wrong Day: " + day);
        }
        System.out.printf("%d은 %s입니다.", day, state);
    }
}

반복문

for문

- 초기화식, 조건식, 증감식으로 구성

- for-each문은 배열이나 컬렉션에 들어있는 값들을 모두 순회할 때 사용

- 컬렉션(collection): 자료구조와 관련된 작업을 수행할 수 있는 기능과 인터페이스로 array, list, set, map의 자료구조를 다루기 위한 기능을 제공. java8부터는 stream API와 결합하여 함수형 프로그래밍 스타일의 작업을 수행 가능

더보기

for문

for (초기화식; 조건식; 증감식) {
    반복할 코드;
}

for-each문

for (type var_name: 배열 or 컬렉션) {
    반복해서 실행할 코드
}

for문 예시

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

for-each문 예시

더보기
public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 4, 2, 9};
        for (int num: arr) {
            System.out.printf("%d ", num);
        }
    }
}

예제1

구구단을 9단까지 모두 출력하시오.

풀이1

더보기
public class Main {
    public static void main(String[] args) {
        for (int j = 2; j <= 9; j++) {
            for (int i = 1; i <= 9; i++) {
                System.out.printf("%d * %d = %d\n", j, i, j*i);
            }
            System.out.println("----------");
        }
    }
}

예제2

N을 입력 받아 N!의 결과를 출력하시오.

풀이2

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();

        int answer = 1;
        for (int i = 1; i <= num; i++) {
            answer *= i;
        }
        System.out.printf("%d! = %d\n", num, answer);
    }
}

 

while문

- 초기화식, 조건식, 증감식으로 구성

- while문: 조건식이 true인 동안 중괄호 블록에 있는 코드를 반복해서 실행하는 반복문

- do-while문: 중괄호 블록은 먼저 실행한 후 조건식을 판단. 최소 1회 실행. 주로 사용자의 입력을 받아 실행할 경우 사용

더보기

while문

while (조건식) {
    반복할 코드;
}

do-while문

do {
    반복할 코드;
} while (조건식);

while문 예시(시간 출력)

더보기
import java.time.LocalDateTime;

public class Main {
    public static void main(String[] args) throws InterruptedException {
        int n = 0;
        while (n < 10) {
            System.out.println(LocalDateTime.now());
            n += 1;
            Thread.sleep(1000); // 1초동안 정지
        }
    }
}

do-while문 예시

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num;

        do {
            System.out.print("Input Even Number: ");
            num = sc.nextInt();
        } while (num % 2 == 0);

        System.out.println("Even Number: " + num);
    }
}

예제1

while문을 사용하여 N을 입력 받아 Factorial(N!)을 구하시오.

풀이1

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int fac = 1;
        while (num > 1) {
            fac *= num--;
        }
        System.out.printf("Factorial: %d\n", fac);
    }
}

예제2

메뉴 선택 기능 구현하기
1. Information 2. Connect 3. Exit 

풀이2

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int choice;
        
        do {
            System.out.print("Select Menu(0: Information, 1: Connect, 2: Exit): ");
            
            while (!sc.hasNextInt()) {
                System.out.println("[Invalid Type] Input the Number.");
                sc.next(); // 입력버퍼 비우기
            }
            
            choice = sc.nextInt();
            
            String result = switch (choice) {
                case 0 -> "Use Information.";
                case 1 -> "Connecting!";
                case 2 -> "Exit";
                default -> "Input Correct Number";
            };
            
            System.out.println(result);
            
        } while (choice < 0|| choice > 9);
    }
}

반복문 제어

- break, continue로 반복문 제어

- break로 가까운 반복문 탈출

- continue로 가까운 반복문으로 이동. 현재 반복문의 나머지 부분을 건너뛰고 다음 반복으로 넘어감

더보기

break

for (초기식; 조건식; 증감식) {
    if (조건식) { // 해당 조건이 true일 경우 반복문 탈출
        break;
    }
    실행되는 코드;
}

continue

for (초기식; 조건식; 증감식) {
    if (조건식) { // 조건식이 true일 경우 아래 코드를 건너뜀
        continue;
    }
    실행되는 코드;
}

break 예시

더보기
public class Main {
    public static void main(String[] args) {
        int num = 991;
        int fac = 0;
        for (int i = 2; i < num; i++) {
            if (num % i == 0) {
                fac = 1;
                break;
            }
        }
        if (fac == 0) {
            System.out.printf("%d is PrimeNumber.", num);
        } else {
            System.out.printf("%d isn't PrimeNumber.", num);
        }
    }
}

continue 예시

더보기
public class Main {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            if (i % 2 == 0) {
                continue;
            }
            System.out.printf("%d ", i);
        }
    }
}

 


제어문

예제1

숫자를 입력 받아 1부터 N까지 짝수의 합과 홀수의 합 구하기

풀이1

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num;
        num = sc.nextInt();
        int oddSum = 0;
        int evenSum = 0;
        for (int i = 1;  i <= num; i++) {
            if (i % 2 == 1) {
                oddSum += i;
            } else {
                evenSum += i;
            }
        }
        System.out.printf("oddSum: %d, evenSum: %d \n", oddSum, evenSum);
    }
}

예제2

숫자를 입력받고 해당 수의 모든 약수를 출력하시오.

풀이2

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        for (int i = 1; i <= num; i++) {
            if (num % i == 0) {
                System.out.printf("%d ", i);
            }
        }
    }
}

예제3

숫자를 입력받아 소수 여부를 판별하시오.

풀이3

더보기
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();

        int count = 0;
        for (int i = 2; i < num; ++i) {
            if (num % i == 0) {
                count++;
            }
        }
        if (count == 0) {
            System.out.println("PrimeNumber");
        } else {
            System.out.println("Not PrimeNumber");
        }
    }
}

 

반응형

'Java(17+) 문법 > Java 기본' 카테고리의 다른 글

[Java] 예외처리  (0) 2025.01.22
[Java] 제네릭/Enum  (0) 2025.01.22
[Java] 클래스 - 생성자/상속/추상클래스  (0) 2025.01.21
[Java] 클래스 - 메서드  (0) 2025.01.21
[Java] 참고자료  (0) 2025.01.20