- 문(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 |