if(조건식) {
// 조건식이 참(true)일 때 수행될 문장들
}
== 대신 대입 연산자 =를 사용하지 않도록 주의하자!! int x = 5;
if(x > 3) {
System.out.println("x는 3보다 큽니다.");
}
if(x > 4) System.out.println("x는 4보다도 큽니다.");
실행 결과 :
x는 3보다 큽니다.
x는 4보다도 큽니다.
위의 식처럼 조건식이 만족하면 블럭 안의 문장이 실행된다.
만약 블럭 안의 문장이 하나라면 블럭을 생략할 수 있다.
if 의 조건식이 거짓일 때 수행될 문장도 추가하고 싶을 때 사용한다
if(조건식) {
// 조건식이 참(true)일 때 수행될 문장들
} else {
// 조건식이 거짓일 때 수행될 문장들
}
한 쪽이 참이면 한 쪽은 거짓인 상반된 관계에 대해서 제어를 하고 싶을 때 사용한다.
if(input == 0) {
System.out.println("0입니다.");
}
if(input != 0) {
System.out.println("0이 아닙니다.");
}
if(input == 0) {
System.out.println("0입니다.");
} else {
System.out.println("0이 아닙니다.");
}
두 개의 코드는 같은 결과를 만들지만 if-else 문이 더 효율적이고 간단하다.
if - else 문은 두 가지 경우 중 하나가 수행되는 구조이다.
셋 이상의 경우의 수를 다룰 때는 if - else if 문을 사용한다.
if(조건식1) {
// 조건식1의 연산결과가 참일 때 수행될 문장들
} else if(조건식2) {
// 조건식2의 연산결과가 참일 때 수행될 문장들
} else if(조건식3) {
// 조건식3의 연산결과가 참일 때 수행될 문장들
} else {
// 위의 어느 조건식도 만족하지 않을 때 수행될 문장들
}
if(score >= 90) {
grade = 'A';
} else if(score >= 80) {
grade = 'B';
} else if(score >= 70) {
grade = 'C';
} else {
grade = 'D';
}
// 이 조건문을 별개의 if 문으로 떼어낸다면
if(score >= 90) {
grade = 'A';
}
if(80 <= score && score < 90) {
grade = 'B';
}
if(70 <= score && score < 80) {
grade = 'C';
}
if (score < 70) {
grade = 'D';
}
if - else if 문을 여러 개의 if문으로 바꿀 때, 조건식이 변하지 않는다면 전혀 다른 코드가 된다!!
if 문에서 경우의 수가 많아질수록 코드도 복잡해지고 처리 시간도 많이 걸린다.
switch 문을 사용하면 하나의 조건식으로 많은 경우의 수를 처리할 수 있고,
표현도 간결하여 알아보기 쉽다.
switch(조건식) {
case 값1 :
// 조건식의 결과가 값1과 같을 경우 수행될 문장들
break;
case 값2 :
// 조건식의 결과가 값2과 같을 경우 수행될 문장들
break;
default :
// 조건식의 결과와 일치하는 case문이 없을 때 수행될 문장들
}
수행되는 코드의 순서
default는 if문의 else 블럭과 같은 역할을 한다고 보면 이해가 쉽다.
int month = 3;
switch(month) {
case 3 :
case 4 :
case 5 :
System.out.println("현재 계절은 봄입니다.");
break;
case 6 :
case 7 :
case 8 :
System.out.println("현재 계절은 여름입니다.");
break;
case 9 :
case 10 :
case 11 :
System.out.println("현재 계절은 가을입니다.");
break;
case 12 :
case 1 :
case 2 :
System.out.println("현재 계절은 겨울입니다.");
break;
}
위의 코드와 같이 조건식에 맞는 case문을 찾아서 해당 문장들을 수행한다.
만약 case 문의 break; 가 없었다면 모든 문장이 다 실행될 것이다.
switch 문의 제약조건
1. switch문의 조건식 결과는 정수 또는 문자열 이어야 한다.
2. case문의 값은 정수 상수 혹은 문자열 상수 만 가능하며, 중복되지 않아야 한다.
for 문은 반복 횟수를 알고 있을 때 적합한 구문이다.
for(초기화; 조건식; 증감식) {
// 조건식이 참일 때 수행될 문장들
}
,로 구분하며, 타입은 같아야 함이 세 가지 요소는 필요하지 않으면 생략할 수 있으며, 심지어 모두 생략 가능하다.
for( ; ; ) { ... }
조건식이 생략된 경우, 참으로 간주되어 무한 반복문이 된다.
public class Main {
public static void main(String[] args) {
int sum = 0;
for(int i=1; i <= 10; i++) {
sum += i;
System.out.printf("1부터 %2d 까지의 합 : %2d%n", i, sum);
}
}
}
for(int i=1; i<10; i++) {
for(int j=1; j<10; j++) {
System.out.print(i + "*" + j + "=" + i*j);
System.out.print("\t");
}
System.out.println();
}
i의 값이 1일 때 내부 반복문에서 j의 값이 1부터 10까지 반복된다.
그 후 외부 반복문의 증감식이 실행되어 i가 2가 되고
내부 반복문이 다시 수행되는 방식으로 진행된다.
while문은 for문에 비해 구조가 간단하다.
조건식과 블럭{ }만으로 이루어져 있고, 조건식이 참인 동안 블럭이 반복된다.
while(조건식) {
// 조건식의 연산결과가 참인 동안 반복될 문장들
}
for(int i=1; i<=10; i++) {
System.out.println(i);
}
// 이 for 문을 while 문으로 변경 시
int i=1;
while(i<=10) {
System.out.println(i);
i++;
}
do {
// 조건식의 연산결과가 참일 때 수행될 문장들
} while(조건식);
public class Main {
public static void main(String[] args) {
int sum = 0;
int i = 0;
while(true) {
if(sum > 100) {
break;
}
++i;
sum += i;
}
System.out.println("i = " + i + "\nsum = " + sum);
}
}
이 코드 같은 무한 반복문에서는 반복문을 탈출한 조건을 만들어놓아야 한다.
이 때, if 같은 조건문과 함께 break 가 항상 같이 사용된다.
for(int i=0; i<=10; i++) {
if(i%3 == 0) {
continue;
}
System.out.print(i + "\t");
}
실행 결과 :
1 2 4 5 7 8 10
3의 배수를 만나면 if 의 조건식이 참이 되어 continue를 실행시킨다.
그 결과 출력문은 수행되지 않고 바로 다음 증감식으로 이동하여 i의 값을 증가시킨다.
백준 2438 : 별 찍기 - 1

백준 2439 : 별 찍기 - 2

실습 1의 답
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=1; i<=N; i++) {
System.out.println("*".repeat(i));
}
}
}
실습 2의 답
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
for(int i=N-1; i>=0; i--) {
System.out.print(" ".repeat(i));
System.out.println("*".repeat(N-i));
}
}
}