안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
제어문이란?
- 제어문을 이용하면 프로그램 실행 순서를 다양한 방법으로 제어할 수 있습니다.
제어문 종류
① 선택 제어문 (if, switch)
② 반복 제어문 (for, while, do-while)
그 중 오늘은 if문에 대해서 알아보겠습니다.
☞ if 단일 구문
//기본구문 : if(조건식) {true일 때 실행};
int a = 10;
if(a == 10) {
//true 일 때 실행될 코드
System.out.println("참입니다!");
}
@콘솔출력값
참입니다!
- 조건문이 true면 { ~ } 실행
- 조건문이 false면 { ~ } 실행하지 않고 무시
사용자에게 값을 입력 받아 양수면 양수 출력하는 구문
Scanner sc = new Scanner(System.in);
System.out.print("> 정수를 입력하세요 : ");
int num = sc.nextInt();
if(num > 0) {
System.out.println("양수입니다.");
}
@콘솔출력값
> 숫자를 입력하세요 : 10
양수입니다.
//음수 입력 시
> 숫자를 입력하세요 : -3
//결과없음
☞ if-else 구문
//기본구문 : if(조건식) {true일 때 출력} else {false일 때 출력};
int a = 10;
if(a % 2 == 0) {
//조건식 참일 때 실행
System.out.println("짝수입니다.");
} else {
//조건식 거짓일 때 실행
System.out.println("홀수입니다.");
}
@콘솔출력값
짝수입니다.
- 조건문이 true면 if 구문의 실행 구문 실행
- 조건문이 false면 else 구문의 실행 구문 실행
- else 생략 가능 (if 단일 구문과 동일해짐)
조건문은 true 아니면 false이므로, 둘 중 하나는 반드시!!! 실행합니다.
☞ if - else if - else 구문
public void test3() {
// 100~90 : A, 89~80 : B, 79~70 : C, 69~60 : D, 59미만 : F
int score = 73;
char 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';
}
System.out.printf("점수 : %d, 학점 : %c\n", score, grade);
}
@콘솔출력값
점수 : 73, 학점 : C
- 처리할 조건식이 여러개인 경우 사용
- else if, else 구문 모두 생략 가능 (else if 구문 개수 상관없이 추가 가능)
하지만 주의할 점!!!
조건식을 검색할 때는 위에서부터 검사를 수행하며, true를 만나게 되면 해당 블록의 중괄호를 실행하고 if문을 탈출합니다.
따라서 중괄호가 100개가 있다고 해도 처음 참이 되는 블록 하나만 실행하게 됩니다.
int score = 100;
char grade =' '; //값 초기화
if(score >= 70) {
grade = 'C';
} else if(score >= 80) {
grade = 'B';
} else if(score >= 90) {
grade = 'A';
} else if(score >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.printf("점수 : %d, 학점 : %c\n", score, grade);
@콘솔출력값
점수 : 100, 학점 : C
※ char grade = ' '; 로 값 초기화를 해주는 이유 : 쓰레기 값 방지를 위함
A와 C의 순서를 바꾸고 score를 100으로 조정하고 실행을 해보았습니다.
처음 if절 (score >= 70)을 만났고, true이기 때문에 'C'를 출력하고 if문을 탈출해버립니다.
100점이면 'A'등급인데 말이죠..! 따라서 순서에 유의하여 작성해줘야합니다.
나이에 따른 연령대 출력하기
public void test4() {
Scanner sc = new Scanner(System.in);
System.out.print("> 나이를 입력하세요 : ");
int age = sc.nextInt();
if(age >= 70) {
System.out.println("노인입니다.");
} else if(age >= 20) {
System.out.println("청년입니다.");
} else {
System.out.println("미성년자입니다.");
}
}
@콘솔출력값
> 나이를 입력하세요 : 23
청년입니다.
나이에 따른 연령대 출력하기 (반대로)
Scanner sc = new Scanner(System.in);
System.out.print("> 나이를 입력하세요 : ");
int age = sc.nextInt();
if(age < 20) {
System.out.println("미성년자입니다.");
} else if(age < 70) {
System.out.println("청년입니다.");
} else {
System.out.println("노인입니다.");
}
@콘솔출력값
> 나이를 입력하세요 : 80
노인입니다.
동일한 코드에서 if-else if를 사용하지 않고 여러 개의 if문을 사용한다면?
public void test5() {
Scanner sc = new Scanner(System.in);
System.out.print("> 나이를 입력하세요 : ");
int age = sc.nextInt();
if(age < 20) {
System.out.println("미성년자입니다.");
} if(age < 70) {
System.out.println("청년입니다.");
} if (age >= 70) {
System.out.println("노인입니다.");
}
}
@콘솔출력값
> 나이를 입력하세요 : 15
미성년자입니다.
청년입니다.
모든 if문을 순회하기 때문에 조건에 맞다면 다 출력을 합니다.
따라서 15를 입력하였을 때 첫 번째 조건문 (age < 20)을 검사하고 true기 때문에 출력구문 출력 → 다음 if문으로 넘어가서 두 번째 조건문 (age < 70)을 검사하고 true기 때문에 출력구문 출력 → 다음 if문으로 넘어가서 세 번째 조건문 (age >= 70) 검사하고 false기 때문에 출력구문 실행이 없습니다.
따라서 처리할 조건식이 많다면 if-else if 문을 적절히 사용해야 합니다!
☞ 중첩 if문
public void test6() {
int score = 100;
String grade =""; //값 초기화
if(score >= 90) {
grade = "A";
if(score >= 95) {
grade += "+";
}
} else if(score >= 80) {
grade = "B";
if(score >= 85) {
grade += "+";
}
} else if(score >= 70) {
grade = "C";
if(score >= 75) {
grade +="+";
}
} else if(score >= 60) {
grade = "D";
if(score >= 65) {
grade += "+";
}
} else {
grade = "F";
}
System.out.printf("점수 : %d, 학점 : %s\n", score, grade);
}
@콘솔출력값
점수 : 100, 학점 : A+
조건문이 true라면 다시 내부 if문을 검사하고 true라면 "+"를 추가해주었습니다.
만일 내부 if문이 false라면 "A"만 출력하고 if문을 빠져나가게 됩니다.
'Java > Java' 카테고리의 다른 글
반복문) for문, for문 무한루프 (0) | 2022.03.07 |
---|---|
제어문) switch문, switch문 fall-through (0) | 2022.03.04 |
메소드란?, 매개변수가 있는/없는 메소드, 리턴 값이 있는/없는 메소드 (0) | 2022.03.03 |
난수란?, Random 클래스, Math.random (0) | 2022.03.03 |
연산자(Operator)란?, 이항연산자, 삼항연산자, 대입연산자 (0) | 2022.03.02 |