[Java] conditional(조건부)

Date:     Updated:

카테고리:

태그:

java.png

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문 테스트
    1. JDK 1.7이상부터 swicth문을 사용하여 문자열을 비교할 수 있다.
    2. 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문 테스트
    1. JDK 1.7이상부터 swicth문을 사용하여 문자열을 비교할 수 있다.
    2. 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원을 투입해주세요!

요약. if문은 여러 조건을 비교하고 각 조건에 따라 다른 동작을 수행하는 조건문이고, switch문은 변수의 값을 비교하고 각 값에 따라 다른 동작을 수행하는 조건문입니다. 간단한 조건에는 if문을, 변수의 값에 따라 다양한 동작을 수행해야 할 때는 switch문을 사용합니다

이제 무언가 미니 프로그램이 만들어진 느낌이다. 슬슬 복잡해지고 어려워지고 있긴해도..뭔가 하는 것 같은 기분이다. 아직은 따라쓰는정도지만 나중에는 만들 수 있겠지!!

Java 카테고리 내 다른 글 보러가기

댓글 남기기