본문 바로가기
Java Live Study with keesunBaik

[step-4] Java - Select

by smhan 2020. 12. 10.

1. 선택문

1.1 조건문

   - 주어진 조건식의 결과에 따라 별도의 명령을 수행하도록 제어하는 명령문

 

1.2 조건문 종류

   - if문

   - if / else 문 

   - if / else if / else 문

   - switch 문

 

1.3 if 문

   - 조건식의 결과가 참(true) 이면 주어진 명령 실행, 거짓(false)이면 아무것도 실행하지 않는다.

 

if 문 순서도

1.3.1 if문 문법

if( 조건식 )

{

   조건식의 결과가 참(true)일때 실행 명령문

}

 

1.3.2 if 문 예제

if ( ch >= "a" && ch <= "z" ) 
{
	System.out.println("해당 문자는 영문 소문자입니다.");
}

1.4 if / else 문

   - if문과 함께 사용하는 else문은 if문의 반대로 주어진 조건의 결과가 거짓( false )이면 명령문을 실행함.

 

 if / else문 순서도

 

1.4.1 if / else 문 문법

if (조건식) {

    조건식의 결과가 참일 때 실행하고자 하는 명령문;

} else {

    조건식의 결과가 거짓일 때 실행하고자 하는 명령문;

}

1.4.1 if / else 문 예제

if ( ch >= "a" && ch <= "z" ) 
{
	System.out.println("해당 문자는 영문 소문자입니다.");
} 
else 
{
	System.out.println("해당 문자는 영문 소문자가 아닙니다.");
}

1.5 if / else if / else 문

   - 조건식을 여러 개 명시할 수 있으므로 중첩된 if문을 좀 더 간결하게 표현할 수 있다.

 

 if / else if / else 문 순서도

1.5.1 if / else if / else 문법

if ( 조건식1 )
{
	조건식1의 결과가 참일 때 실행
}
else if ( 조건식 2 )
{
	조건식2의 결과가 참일 때 실행
}
else 
{
	조건식1의 결과도 거짓, 조건식2의 결과도 거짓일 경우 실행
}

 

1.5.2 if / else if / else 문 예제

package com.basic.study.sample;

import java.util.Scanner;

class Tax
{
    private int income;     // 과세

    Tax( int income )
    {
        this.income = income;
    }

    public int calculationTax ()
    {
        int tax = 0;	// 세금

        if ( income <= 1000 )
        {
            tax = (int) ( 0.09 * income );
        }
        else if ( income <= 4000 )
        {
            tax = (int)( 1000 * 0.09 + 0.18 * ( income - 1000 ) );
        }
        else if ( income < 8000 )
        {
            tax = (int)( 1000 * 0.09 + 3000 * 0.18 + 0.27 * ( income - 4000 ) );
        }
        else
        {
            tax = (int)( 1000 * 0.09 + 3000 * 0.18 + 4000 * 0.27 + 0.36 );
        }
        return tax;
    }
}

public class SelectionStatement
{
    public static void main(String[] ares)
    {
        Scanner sc = new Scanner(System.in);

        System.out.print("과세 표준 금액을 입력하세요 : ");
        Tax taxObj = new Tax( sc.nextInt() );
        
        System.out.println( "소득세는 " + taxObj.calculationTax() + "입니다." );
    }
}

1.6 삼항 연산자에 의한 조건문

   - JAVA에서 if / else 문을 좀 더 간결하게 표현하기 위한 명령문

 

1.6.1 삼항 연산자 문법

조건식 ? 반환값1(true) : 반환값2(false)

1.6.2 삼항 연산자 예제

   - 근로 소득세를 계산하고 과세를 판별하는 프로그램을 작성해보자

package com.basic.study.sample;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

class Tax
{
    private int income;     // 과세

    Tax( int income )
    {
        this.income = income;
    }

    public int calculationTax ()
    {
        int tax = 0;

        if ( income <= 1000 )
        {
            tax = (int) ( 0.09 * income );
        }
        else if ( income <= 4000 )
        {
            tax = (int)( 1000 * 0.09 + 0.18 * ( income - 1000 ) );
        }
        else if ( income < 8000 )
        {
            tax = (int)( 1000 * 0.09 + 3000 * 0.18 + 0.27 * ( income - 4000 ) );
        }
        else
        {
            tax = (int)( 1000 * 0.09 + 3000 * 0.18 + 4000 * 0.27 + 0.36 );
        }
        return tax;
    }
}

class AdditionalTax
{
    SimpleDateFormat formatDt = new SimpleDateFormat("yyyyMMdd");

    public String getCurrentDate()
    {
        return formatDt.format( System.currentTimeMillis() );
    }

    public String checkAdditionalTax() throws ParseException
    {
        Date standardDt = formatDt.parse( getCurrentDate().substring( 0 , 4 ) + "0531" );
        Date currentDt = formatDt.parse( getCurrentDate() );

        int compare = standardDt.compareTo( currentDt );
        return compare > 0 ? "false" : "true";
    }
}

public class SelectionStatement
{
    public static void main(String[] ares) throws ParseException 
    {
        Scanner sc = new Scanner(System.in);

        AdditionalTax additionalTax = new AdditionalTax();
        String checkTax = additionalTax.checkAdditionalTax().equals("true") ? "과세 대상 입니다." : "과세 대상이 아닙니다.";

        System.out.print("과세 표준 금액을 입력하세요 : ");
        Tax taxObj = new Tax( sc.nextInt() );
        
        System.out.println( "소득세는 " + taxObj.calculationTax() + "입니다." );
        System.out.println( "고객님께서는 " + checkTax );
    }
}

삼항 연산자를 이용한 과세 대상 판별 프로그램 결과값

 

1.7 switch 문

   - 주어진 조건 값의 결과에 따라 프로그램이 다른 명령을 수행하는 조건문이다.

 

1.7.1 switch 문 문법

switch ( 식 ) // byte , short , char , int 등의 자료형 데이터가 들어감
{
	case 값1 :
    	명령문들
        break;
	case 값2 :
    	명령문들
        break;
	default :
    	명령문들
        break;
}

1.7.2 switch 문 예제

class InputMultiple
{
    public void checkJuminNumberSevenDigit( int num )
    {
        String gender = num % 2 == 0 ? "여자" : "남자";

        switch ( num )
        {
            case 9 : case 0 : System.out.println( "\t 당신은 " + 1800 + " 년대 " + gender + " 입니다." ); break;
            case 1 : case 2 : System.out.println( "\t 당신은 " + 1900 + " 년대 " + gender + " 입니다." ); break;
            case 3 : case 4 : System.out.println( "\t 당신은 " + 2000 + " 년대 " + gender + " 입니다." ); break;
            default: System.out.println("주민번호 7번째 자리를 잘못 입력하셨습니다.");
        }
    }
}

public class SelectionStatement
{
    public static void main(String[] ares) throws ParseException
    {
        InputMultiple inputMulti = new InputMultiple();
        Scanner sc = new Scanner( System.in );
        System.out.print("당신의 주민번호 7번째 자리를 입력해주세요 : ");
        inputMulti.checkJuminNumberSevenDigit( sc.nextInt() );

	}
}

1.7.2 switch문 예제 실행 결과

2. 반복문

2.1 반복문

 - 똑같은 명령을 일정 횟수만큼 반복하여 수행

 

2.2 반복문 종류

 - for 문

 - while 문

 - do / while 문

 - Enhanced for 문

 

2.3 for 문

 - 초기식, 조건식, 증감식을 모두 포함하는 반복문

 

2.3.1 for 문 문법

for (초기식; 조건식; 증감식) 
{
    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}

 

for문 동작 방식

2.3.2 for 문 예제

package com.basic.study.sample;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class RepetitiveStatement
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader in = new BufferedReader ( new InputStreamReader( System.in ) );

        int tot = 0;

        System.out.print( "First number : " );
        int sub1 = Integer.parseInt( in.readLine() );

        System.out.print( "Second number : " );
        int sub2 = Integer.parseInt( in.readLine() );

        System.out.print( "Multiple number : " );
        int n  = Integer.parseInt( in.readLine() );

        if ( sub1 > sub2 )
        {
            int temp = sub1;
            sub1 = sub2;
            sub2 = temp;
        }

        for ( int i = sub1; i <= sub2; i++ )
        {
            if ( i % n == 0 )
            {
                tot += i;
            }
        }

        System.out.println();
        System.out.print( sub1 + "에서" + sub2 + "사이의" );
        System.out.println( n + "배수의 합은" + tot + "입니다" );
    }
}

2.3.2 for문 예제 실행 결과

2.4 while문

 - 행위에 의한 반복문을 작성할 수 있다.

 

2.4.1 while문 문법

while (조건식) 
{
	조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
}

while 문 동작 방식

 

2.4.2 while문 예제

public class RepetitiveStatement
{
    public static void main(String[] args) throws IOException
    {
        Scanner sc = new Scanner(System.in);
        boolean stop = false;

        while (!stop)
        {
            System.out.println("2개의 정수 입력");

            int num1 = sc.nextInt();
            int num2 = sc.nextInt();

            int num = num1 % num2; // 나머지 구하는 공식

            System.out.println(num1 + " % " + num2 + " = " + num);
            System.out.println("계속 Y, 종료 N 입력");

            String yn = sc.next();

            // Y 또는 y 입력시 반복
            if (yn.equals("Y") || yn.equals("y"))
            {
                System.out.println("---------------------");
                continue;
            }

            // N 또는 n 입력시 종료
            if (yn.equals("N") || yn.equals("n"))
            {
                break;
            }
        }
        
        System.out.println("시스템이 종료되었습니다.");   
	}
}

while 문 실행 결과

2.5 do ~ while문

 - wihle문은 조건부터 검사하지만 do ~ while문은 루프를 무조건 한번 실행 후 조건을 검사한다.

 

2.5.1 do ~ while문 문법

do {
    조건식의 결과가 참인 동안 반복적으로 실행하고자 하는 명령문;
} while (조건식);

do while문 동작 방식

2.5.2 do ~ while문 예제

public class RepetitiveStatement
{
    public static void main(String[] args) throws IOException
    {
        int i = 1, j = 1;
        
        while ( i < 1 ) {
            System.out.println("while 문이 " + i + "번째 반복 실행중입니다.");
            i++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨.
        }

        System.out.println("while 문이 종료된 후 변수 i의 값은 " + i + "입니다.");
        
        do {
            System.out.println("do / while 문이 " + i + "번째 반복 실행중입니다.");
            j++; // 이 부분을 삭제하면 무한 루프에 빠지게 됨.
        } while ( j < 1 );

        System.out.println("do / while 문이 종료된 후 변수 j의 값은 " + j + "입니다.");
	}
}

do ~ while 문 실행 결과