이전 포스팅에서는 IF 조건문의 기본적인 부분(최하단 링크)만 다뤄봤습니다. 이번에는 IF 조건문을 다양하게 만들어보고, 성적을 넣었을 때 등급을 출력하는 프로그램을 만들어보도록 하겠습니다.
논리 연산자와 비교 연산자
논리 연산자와 비교 연산자는 IF 조건에 가장 많이 활용되는 연산자로 얼마나 이 연산자들을 이해하는가에 따라 많은 개발을 할 수가 있어집니다.
문제 예시
현재 나에게 오렌지가 5개가 있고, 사과가 4개가 있으며 멜론은 없다.
친구한테 오렌지 4개를 주고 사과를 2개를 주었다.
나한테 오렌지가 2개 이상이면, "오렌지가 2개 이상입니다"라는 문구를 출력한다.
사과가 2개 이상이고 멜론이 있으면, 사과와 멜론이 있습니다라고 문구를 출력하며, 사과가 없거나, 멜론이 없을 경우 각각 "사과가 없습니다.", "멜론이 없습니다." 혹은 "둘다 없습니다"라는 문구를 출력하시오
위 문제 예시, 코드
public static void main(String[] args) {
int orange = 5;
int apple = 4;
int melon = 0;
orange = orange - 4;
apple = apple - 2;
if(orange >= 2) {
System.out.println("오렌지가 2개 이상입니다.");
}
if(apple >= 2 && melon > 0) {
System.out.println("사과와 멜론이 있습니다");
} else if(apple == 0 || melon == 0) {
if(apple == 0 && melon == 0) {
System.out.println("둘다 없습니다");
}
else if(apple == 0) {
System.out.println("사과가 없습니다.");
}
else {
System.out.println("멜론이 없습니다.");
}
}
}
결과
멜론이 없습니다.
위 코드는 문제 예시를 그대로 코딩을 한 것이며, 상황에 따라 if와 else if를 적절히 섞어서 코딩을 하였습니다. 우선, 처음에 나오는 오렌지가 2개 이상입니다.의 경우 오렌지가 1개이기 때문에 실행이 되지 않으며, 다음에 진행하는 사과와 멜론의 경우 현재 사과는 2개, 멜론이 0개 이기 때문에 멜론이 없습니다만 나오게 됩니다.
코딩은 우선 조건들을 모두 부합하는지를 체크해봐야 되는데 위의 경우 if ~ else if까지만 되어 있어서 조건에 구멍이 생길 수 있습니다만, 문제 예시 자체가 그러하기 때문에 이렇게 짠 것이며, 만약 조건이 사과와 멜론이 둘중에 하나 있거나 둘다 없을 경우라는 조건으로 시작된다면
if (apple > 0 || melon > 0) {
// 사과 혹은 멜론이 있을 경우
} else {
// 둘다 없을 경우
}
이와 같이 if ~ else로 끝낼 수 있게 됩니다.
국영수 성적 프로그램
문제 예시
국어, 영어, 수학 점수를 입력 받고 아래와 같이 성적을 출력하는 프로그램을 작성하시오.
각 과목 중 하나라도 50점 미만일 경우, 해당 유저는 무조건 과락이 되며, F 등급을 받게 됩니다.
전체 성적 평균이 80점 이상일 경우 A입니다.
전체 성적 평균이 70점 이상일 경우 B입니다.
전체 성적 평균이 60점 이상일 경우 C입니다.
그 외에는 D입니다.
성적 프로그램 코드
public static void main(String[] args) {
int korean = 80;
int english = 90;
int math = 49;
// 성적의 평균을 구한다.
int avg = (korean + english + math) / 3;
// 과락일 경우
if(korean < 50 || english < 50 || math < 50) {
System.out.println("F");
}
// 과락이 아닌 경우
else {
if(avg >= 80) {
System.out.println("A");
} else if(avg >= 70) {
System.out.println("B");
} else if(avg >= 60) {
System.out.println("C");
} else {
System.out.println("D");
}
}
}
위 프로그램은 처음에 과락 여부를 체크하기에 과락이냐 아니냐로 if ~ else로 한번 조건 분기를 하게 되며, 과락이 아닐 경우 조건을 다시 분기하게 되는데 이때 else 구문에 또다른 if문을 넣어서 성적을 계산하게 됩니다.
여기에 중요한 포인트는 if 부터 else if까지 성적을 체크하는 것에서 avg >= 80을 가장 먼저 해야 한다는 것입니다. 80점 이상인가? 아니면 70점 이상인가? 순으로 가야 하지, 60점이상인가? 아니면 70점 이상인가?라는 조건문은 진행이 될 수 없기 때문입니다.
이런 순서를 따지기 싫으면 아래와 같이 코딩할 경우 순서와 상관이 없어집니다.
public static void main(String[] args) {
int korean = 80;
int english = 90;
int math = 60;
int avg = (korean + english + math) / 3;
System.out.println("평균은? " + avg);
// 과락
if(korean < 50 || english < 50 || math < 50) {
System.out.println("F");
} else {
if(avg >= 60 && avg < 70) {
System.out.println("C");
} else if(avg >= 70 && avg < 80) {
System.out.println("B");
} else if(avg >= 80) {
System.out.println("A");
} else {
System.out.println("D");
}
}
}
위 방식으로 할 지 아래 방식으로 할 지 개인의 취향일 수 있습니다. 첫번째 방식의 경우 실수를 할 경우 정말 알아차리기 힘든 경우가 발생하는 단점이 있고 아래와 같은 방식은 코드가 좀더 지저분해져 버리는 문제가 발생할 수 있기 때문입니다.
연관포스팅
[Java] 자바 101 강의 #8 (IF 조건문, 기본 사용법)
'Lecture > Java 강의' 카테고리의 다른 글
[Java] 자바 101 기초 강의 #11 ( List형 ) (0) | 2022.04.26 |
---|---|
[Java] 자바 101 강의 #10 ( Switch문 사용하기 ) (0) | 2022.04.25 |
[Java] 자바 101 강의 #8 (IF 조건문, 기본 사용법) (0) | 2022.04.15 |
[Java] 자바 101 강의 - #7 (논리 연산자) (0) | 2022.04.12 |
[Java] 자바 101 강의 - #6 (비교 연산자) (0) | 2022.04.11 |