[Java] conditional(조건부)
카테고리: Java
태그: coding Programming Java
if 문이란?
if 문은 프로그래밍에서 조건을 검사하고, 해당 조건이 참일 때 특정한 코드블록을 실행하는 제어구조이다
- if 문은 조건식이 참(True)이면 중괄호 ‘{}’ 내부의 코드가 실행되고, 조건식이 거짓(False)이면 해당 코드블록은 건너뛴다
if 문 표현식
- if(조건식)
- { 조건식이 true일 때 실행할 명령문 }
조건식 : true or false 가 나오는 연산식을 조건식이라고 한다
- if 문은 조건식 결과 값이 참(true)이면 ‘{}’ 안의 코드를 실행하고,
- 조건식의 결과 값이 거짓(false)이면 ‘{}’ 안의 코드를 무시하고 넘어감
- 정수 한 개를 입력받아 그 수가 짝수이면 입력하신 숫자는 짝수입니다라고 출력하고,
- 짝수가 아니면 출력하지 않는 구문을 만들어보자
- 단 조건과 관련없이 프로그램이 종료될 때 프로그램을 종료합니다 라고 출력되도록 하자
package section01.conditional;
import java.util.Scanner;
public class A_if {
public void testSimpleIfStatement() {
Scanner sc = new Scanner(System.in);
System.out.print("숫자 한 개를 입력하세요 : ");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println("입력하신 숫자는 짝수입니다. ");
}
System.out.println("프로그램이 종료합니다.");
}
}
중첩된 if문 실행 흐름 확인 */
- 정수 한개를 입력 받아 그 수가 양수인 경우에만 짝수인지를 확인하고
- 짝수이면 “입력하신 숫자는 양수이면서 짝수입니다”라고 출력하고
- 둘 중 하나라도 해당하지 않으면 아무 내용도 출력하지 않는 구문을 작성해주자
- 단, 조건과 상관없이 프로그램이 종료될 때 “프로그램이 종료합니다”라고 출력 되도록 한다.
public void testNestedIfStatment(){
Scanner sc = new Scanner(System.in);
System.out.print("숫자 한 개를 입력하세요 : ");
int num = sc.nextInt();
if(num > 0){
if(num % 2 == 0){
System.out.println("입력하신 숫자는 양수이면서 짝수입니다");
}
}
//System.out.println("프로그램을 종료합니다");
}
if-else 문 단독 사용에 대한 흐름을 이해하고 적용할 수 있다
- [is-else 표현식]
- if(조건식){
- 조건식이 true 일 때 실행한 명령문
- } else {
- 조건식이 false 일 때 실행형 명령문
- }
if 문은 조건식의 결과가 참이면 if {}안에 있는 코드를 실행하고 조건식의 결과가 거짓이면 else {} 안에 있는 코드를 실행한다
정수 한 개를 입력받아 그 수가 홀수이면 “입력하신 숫자는 홀수 입니다”를 출력하고 홀수가 아니면 “입력하신 숫자는 짝수입니다” 를 출력하는 프로그램을 작성해보자 단, 조건과 상관없이 프로그램이 종료할 때 “프로그램을 종료합니다”라고 출력되도록 한다
package section01.conditional;
import java.util.Scanner;
public class B_ifElse {
public void simpleIFlseStatement() {
/* 짝수인지 조건 확인 */
Scanner sc = new Scanner(System.in);
System.out.print("정수를 한개를 입력 하세요 : ");
int num = sc.nextInt();
if (num % 2 != 0) {
/* 조건문이 참일 때 출력할 내용 */
System.out.println("입력하신 숫자는 홀수 입니다. ");
} else {
/* 조건문이 거짓일 때 출력할 내용 */
System.out.println("입력하신 숫자는 짝수 입니다. ");
}
/* 조건문과 상관 없이 프로그램 종료시 출력할 내용 */
System.out.println("프로그램이 종료합니다.");
}
}
중첩된 if-else 문의 흐름을 이해하고 적용할 수 있다. / / 중첩된 if-else문 실행 흐름 확인 */
/*
* 숫자를 하나를 입력받아 양수이면 "입력하신 숫자는 양수입니다"를 출력하고
* 음수이면 "입력하신 숫자는 음수입니다를 출력."
* 단, 0이면 "0입니다"라고 출력하세요
* 조건과 상관없이 프로그램이 종료될때는
public void testNeatedIfElseStatment(){
Scanner sc = new Scanner(System.in);
System.out.print("정수 하나를 입력하세요 : ");
int num = sc.nextInt();
if(num!=0){
if(num > 0){
System.out.println("입력하신 숫자는 양수입니다.");
}else{
System.out.println("입력하신 숫자는 음수입니다.");
}
}else{ //num == 0
System.out.println("입력하신 숫자는 0입니다.");
}
}
수업목표 if-else-if 문 단독 사용에 대한 흐름을 이해하고 적용할 수 있다
- [is-else-if문 표현식]
- if(조건식1) {
- 조건식이 1이 true 일 때 실행할 명령문
- } else if(조건식2) {
- 조건식이 2가 true 일 때 실행할 명령문
- } else {
- 위의 두 개의 조건이 모두가 거짓일 경우 실행할 명령문
public class C_ifElself {
public void testSimpleIfElseIfStatement() {
System.out.println("산 속에 나무를 하던 나무꾼이 연못에 도끼를 빠트리고 말았다");
System.out.println("연못에서 산신령이 나타나 금도끼, 은도끼 쇠도끼를 들고 나타났다");
System.out.println("나무꾼한테 어떤 도끼가 나무꾼의 도끼인지 물어보았다.");
System.out.print("어느 도끼가 너의 도끼이냐? (1.금도끼 2.은도끼 3.쇠도끼) : ");
Scanner sc = new Scanner(System.in);
int answer = sc.nextInt();
if (answer == 1) {
System.out.println("이런 거짓말쟁이!! 너에게는 아무런 도끼도 줄 수 없구나!!!");
} else if (answer == 2) {
System.out.println("욕심이 과하지는 않지만 그래도 넌 거짓말을 하고 있구나!! 어서 썩 사라지거라!!");
} else {
System.out.println("오호 정직하구나~ 여기 있는 금도끼, 은도끼, 쇠도끼 모두 가져가거라!!! 옛따!!!!");
}
System.out.println("그렇게 산신령은 다시 연못 속으로 사라졌다....");
}
}
중첩된 if-else-if문의 흐름을 이해하고 적용할 수 있다 */
- 중첩된 if-else-if문 실행 흐름 확인 */
- ohgiraffers 대학의 김xx교수님은 학생들 시험 성적을 수기로 계산해서 학점 등급을 매기는 채점방식을 사용하고 있었다.
- 90점 이상히면 ‘A’, 80점 이상이면 ‘B’, 70점 이상이면 ‘C’, 60점 이상이면 ‘D’를
- 60점 미망인 경우에는 ‘F’를 학점 등급으로하는 기준이다.
- 추가로 각 등급의 중간점수(95, 85, 75..)인 경우 ‘+’ 를 붙여서 등급을 세분화 하다보니 신경쓸게 이만 저만이 아니다.
- 그래서 학생의 이름과 점수를 입력하면 자동으로 학점 등급이 계산되는 프로그램을 만들기로 했다
public void testNestedIfElseIfStatment() {
Scanner sc = new Scanner(System.in);
System.out.print("학생의 이름을 입력하세요 : ");
String name = sc.nextLine();
System.out.print("학생의 점수를 입력하세요 : ");
int point = sc.nextInt();
String grade = "";
if (point >= 90) {
grade = "A";
if (point >= 95) {
grade += "+";
}
} else if (point >= 80) {
grade = "B";
if (point >= 85) {
grade += "+";
}
} else if (point >= 70) {
grade = "C";
if (point >= 75) {
grade += "+";
}
} else if (point >= 60) {
grade = "D";
if (point >= 65) {
grade += "+";
}
} else {
grade = "F";
}
System.out.println(name + " 학생의 학점은 " + grade + " 입니다.");
System.out.println(name + "프로그램을 종료합니다.");
}
public void test1NestedIfElseIfStatment() {
Scanner sc = new Scanner(System.in);
System.out.print("학생의 이름을 입력하세요 : ");
String name = sc.nextLine();
System.out.print("학생의 점수를 입력하세요 : ");
int point = sc.nextInt();
String grade = "";
if (point >= 90) {
grade = "A";
if (point >= 95) {
}
} else if (point >= 80) {
grade = "B";
if (point >= 85) {
}
} else if (point >= 70) {
grade = "C";
if (point >= 75) {
}
} else if (point >= 60) {
grade = "D";
if (point >= 65) {
} else {
grade = "F";
}
}
if (point % 10 >= 5 && point >= 60 || point == 100) {
grade += '+';
}
System.out.println(name + " 학생의 학점은 " + grade + " 입니다.");
System.out.println(name + "프로그램을 종료합니다.");
}
switch문 단독 사용에 대한 흐름을 이해하고 적용할 수 있다
- [switch문 표현식]
- switch(비교할변수){
- case 비교값1 : 비교값1과 일치할 경우 실행할 구문; break;
- case 비교값2 : 비교값2과 일치할 경우 실행할 구문; break;
- default : case에 모두 해당하지 않을 경우 실행할 구문; break;
- 여러 개의 비교값 중 일치하는 조건에 해당하는 로직을 실행하는 것은 if-else-if와 유사하다
- 따라서 일부 호환이 가능하다
- 하지만 switch문으로 비교 가능한 값은 정주, 문자, 문자열 형태의 값이다.
- 실수와 논리는 비교할 수 없다
- 또한 정확하게 일치하는 경우만 비교할 수 있으며 대소 비교를 할 수 없다는 것이 차이점이다.
- case절에는 변수를 사용하지 못한다(값만 비교가능)
- 또한, 문자열 비교는 jdk1.7 이상부터 가능하다
- 정수 두 개와 연산 기호 문자를 입력 받아서
- 두 숫자의 연산 결과를 출력해보는 간단한 계산기 만들기
package section01.conditional;
import java.util.Scanner;
public class D_switch {
public void testSimpleSimpleStatement() {
/* 정수 두 개와 연산기호 입력 */
Scanner sc = new Scanner(System.in);
System.out.print("첫 번째 정수 입력 : ");
int fnum = sc.nextInt();
System.out.print("두 번째 정수 입력 : ");
int snum = sc.nextInt();
sc.nextLine();
System.out.print("연산 기호 입력 (+, -, *, /, %) : ");
int inum = sc.nextInt();
sc.nextLine(); // 개행 문자 소비
System.out.print("연산 기호 입력 (+, -, *, /, %) : ");
char op = sc.nextLine().charAt(0);
/* 연산의 결과를 저장할 변수 */
int result = 0;
switch (op) {
case '+':
result = fnum + snum;
break;
case '-':
result = fnum - snum;
break;
case '*':
result = fnum * snum;
break;
case '/':
result = fnum / snum;
break;
case '%':
result = fnum % snum;
break;
}
System.out.println(fnum + " " + op + " " + snum + " = " + result);
}
}
swicth문 내에 break문에 대해 흐름을 이해하고 적용할 수 있다
- swicth 문을 이용하여 문자열 값 비교 및 break문 테스트
- JDK 1.7이상부터 swicth문을 사용하여 문자열을 비교할 수 있다.
- break를 사용하지 않으면 실행구문을 계속 동작시킨다
public void testSwitchVendingMachine() {
System.out.println("=== OhGiraffers vending machine ===");
System.out.println(" 사이다 콜라 환타 바카스 핫식스 ");
System.out.println("==============================");
System.out.print("음료를 선택해주세요 : ");
/* 원하는 음료를 문자열로 입력받음 */
Scanner sc = new Scanner(System.in);
String selectedDrink = sc.nextLine();
int price = 0;
switch (selectedDrink) {
case "사이다":
System.out.println("사이다를 선택하셨습니다.");
price = 500;
case "콜라":
System.out.println("콜라를 선택하셨습니다.");
price = 600;
case "환타":
System.out.println("환타를 선택하셨습니다.");
price = 700;
case "바카스":
System.out.println("바카스를 선택하셨습니다.");
price = 2000;
case "핫식스":
System.out.println("핫식스를 선택하셨습니다.");
price = 10000;
}
System.out.println(price + "원을 투입해주세요!");
}
swicth문 내에 break문에 대해 흐름을 이해하고 적용할 수 있다
- swicth 문을 이용하여 문자열 값 비교 및 break문 테스트
- JDK 1.7이상부터 swicth문을 사용하여 문자열을 비교할 수 있다.
- break를 사용하지 않으면 실행구문을 계속 동작시킨다
public void testSwitchVendingMachine1() {
System.out.println("=== OhGiraffers vending machine ===");
System.out.println(" 사이다 콜라 환타 바카스 핫식스 ");
System.out.println("==============================");
System.out.print("음료를 선택해주세요 : ");
/* 원하는 음료를 문자열로 입력받음 */
Scanner sc = new Scanner(System.in);
String selectedDrink = sc.nextLine();
int price = 0;
String order = "";
switch (selectedDrink) {
case "사이다":
order = "사이다";
price = 500;
break;
case "콜라":
order = "콜라";
price = 600;
break;
case "환타":
order = "환타";
price = 700;
break;
case "바카스":
order = "바카스";
price = 2000;
break;
case "핫식스":
order = "핫식스";
price = 10000;
break;
}
System.out.println(order + "를 선택하셨습니다.");
System.out.println(price + "원을 투입해주세요!");
}
자 이렇게 작성이 다 끝났으니 이제 실행 테스트를 해보기위해 Application 클래스를 만들어주자
package section01.conditional;
public class Application {
public static void main(String[] args) {
A_if a = new A_if();
/* 단독 if 문 흐름 확인용 출력*/
a.testSimpleIfStatement();
/*중첩 if문 흐름 확인용 테스트 출력*/
//a.testNestedIfStatment();;
B_ifElse b = new B_ifElse();
/* 단독 if-else 문 흐름 확인용 메소드 호출*/
b.simpleIFlseStatement();
/*중첩 if-else 문 흐름 확인용 테스트 출력*/
//b.testNeatedIfElseStatment();
C_ifElself c = new C_ifElself();
//c.testSimpleIfElseIfStatement();
//c.testNestedIfElseIfStatment();
//c.test1NestedIfElseIfStatment();
D_switch d = new D_switch();
//d.testSimpleSimpleStatement();
//d.testSwitchVendingMachine();
d.testSwitchVendingMachine1();
}
}
package section01.conditional;
public class Application {
public static void main(String[] args) {
A_if a = new A_if();
/* 단독 if 문 흐름 확인용 출력*/
a.testSimpleIfStatement();
/*중첩 if문 흐름 확인용 테스트 출력*/
a.testNestedIfStatement();
B_ifElse b = new B_ifElse();
/* 단독 if-else 문 흐름 확인용 메소드 호출*/
b.simpleIFlseStatement();
/*중첩 if-else 문 흐름 확인용 테스트 출력*/
b.testNeatedIfElseStatment();
C_ifElself c = new C_ifElself();
//c.testSimpleIfElseIfStatement();
//c.testNestedIfElseIfStatement();
//c.test1NestedIfElseIfStatement();
D_switch d = new D_switch();
//d.testSimpleSimpleStatement();
//d.testSwitchVendingMachine();
d.testSwitchVendingMachine1();
}
}
이렇게 작성해서 하나씩 test 해보면 된다!!
a.testSimpleIfStatement();
a.testNestedIfStaement();
테스트
- 출력값
숫자 한 개를 입력하세요 : 1
프로그램이 종료합니다.
숫자 한 개를 입력하세요 : 2
입력하신 숫자는 양수이면서 짝수입니다
b.simpleIFlseStatement();
b.testNeatedIfElseStatment();
테스트
-출력값
정수를 한개를 입력 하세요 : 3
입력하신 숫자는 홀수 입니다.
프로그램이 종료합니다.
정수 하나를 입력하세요 : 5
입력하신 숫자는 양수입니다.
c.testSimpleIfElseIfStatement();
테스트
산 속에 나무를 하던 나무꾼이 연못에 도끼를 빠트리고 말았다
연못에서 산신령이 나타나 금도끼, 은도끼 쇠도끼를 들고 나타났다
나무꾼한테 어떤 도끼가 나무꾼의 도끼인지 물어보았다.
어느 도끼가 너의 도끼이냐? (1.금도끼 2.은도끼 3.쇠도끼) : 1
이런 거짓말쟁이!! 너에게는 아무런 도끼도 줄 수 없구나!!!
그렇게 산신령은 다시 연못 속으로 사라졌다....
산 속에 나무를 하던 나무꾼이 연못에 도끼를 빠트리고 말았다
연못에서 산신령이 나타나 금도끼, 은도끼 쇠도끼를 들고 나타났다
나무꾼한테 어떤 도끼가 나무꾼의 도끼인지 물어보았다.
어느 도끼가 너의 도끼이냐? (1.금도끼 2.은도끼 3.쇠도끼) : 2
욕심이 과하지는 않지만 그래도 넌 거짓말을 하고 있구나!! 어서 썩 사라지거라!!
그렇게 산신령은 다시 연못 속으로 사라졌다....
산 속에 나무를 하던 나무꾼이 연못에 도끼를 빠트리고 말았다
연못에서 산신령이 나타나 금도끼, 은도끼 쇠도끼를 들고 나타났다
나무꾼한테 어떤 도끼가 나무꾼의 도끼인지 물어보았다.
어느 도끼가 너의 도끼이냐? (1.금도끼 2.은도끼 3.쇠도끼) : 3
오호 정직하구나~ 여기 있는 금도끼, 은도끼, 쇠도끼 모두 가져가거라!!! 옛따!!!!
그렇게 산신령은 다시 연못 속으로 사라졌다....
c.testNestedIfElseIfStatement();
테스트
학생의 이름을 입력하세요 : 아무개
학생의 점수를 입력하세요 : 87
아무개 학생의 학점은 B+ 입니다.
아무개프로그램을 종료합니다.
d.testSwitchVendingMachine1();
테스트
=== OhGiraffers vending machine ===
사이다 콜라 환타 바카스 핫식스
==============================
음료를 선택해주세요 : 사이다
사이다를 선택하셨습니다.
500원을 투입해주세요!
댓글 남기기