ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210930 / if문, if else문, if else if문, switch case문, Math.random()
    개발자 수업/Java 2021. 10. 1. 10:12

    1. 조건문 - if문
        1) 주어진 조건에 따라서 다른 실행이 이루어지도록 구현
        2) if문 문법
            if(조건식){
                수행문;     // 조건식이 '참'인 경우에 수행문이 실행
                            // 조건식이 '참'이 아닌 경우에 수행문이 실행되지 않음
            }

           if ~ else문 문법
            if(조건식){
                수행문1;    // 조건식이 '참'인 경우 실행
            }
            else{
                수행문2;    // 조건식이 '참'이 아닌 경우 실행
            }

    package kr.co.ezenac.decision;
    
    public class IfifElseTest {
    	public static void main(String[] args) {
    		int score = 66;
    		
    		/*
    		 * 수십개의 if문이 존재하더라도 CPU는 모든 if문을 참조함(비효율적)
    		 */
    		
    		if(score > 90) {
    			System.out.println("점수가 90보다 큽니다");
    			System.out.println("등급은 A입니다");
    		}
    		
    		if(score > 80) {
    			System.out.println("점수가 80보다 큽니다");
    			//System.out.println("등급은 A입니다");
    		}
    		System.out.println();
    		
    		/*
    		 * if-else 구문은 50% 확률일 때 사용하는게 바람직함
    		 * else 구문 옆에는 조건문이 절대로 오면 안됨
    		 */
    		
    		if(score > 90) {
    			System.out.println("90점 이상입니다");
    		}
    		else {
    			System.out.println("90점 미만입니다");
    		}
    	}
    }



    2. 조건이 여러 개일 때의 if문 - if ~ else if ~ else 문
        1) 하나의 상황에 대한 조건이 여러 개로 나뉘고 각 조건에 다른 수행이 이루어져야 할 경우
        2) 각 조건은 상호 배타적임
            if(조건식1){
                수행문1;     // 조건식1이 '참'인 경우 수행하고 전체 조건문은 빠져나감
            }
            else if(조건식2){
                수행문2;     // 조건식2가 '참'인 경우 수행하고 전체 조건문은 빠져나감
            }
            else if(조건식3){
                수행문3;     // 조건식3이 '참'인 경우 수행하고 전체 조건문은 빠져나감
            }
            else {
                수행문4;     // 위 조건이 모두 해당되지 않는 경우 수행 (디폴트 조건)
            }
            수행문5;        // if ~ else if ~ else 문이 끝나면 수행됨

    package kr.co.ezenac.decision;
    
    import java.util.Scanner;
    
    /*
     *  사용자로부터 나이를 입력받아서
     *  8보다 적으면 : 미취학 아동입니다. 입장료는 1,000원입니다.
     *  14보다 적으면 : 초등학생입니다. 입장료는 2,000원입니다.
     *  20보다 적으면 : 중고등학생입니다. 입장료는 2,500원입니다.
     *  그 외 : 일반인입니다. 입장료는 3,000원입니다.
     *  
     *  위 문장에 출력되는 프로그램을 작성하시오
     */
    
    public class IfNestedTest02 {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		
    		System.out.print("나이를 입력하세요 : ");
    		int age = scan.nextInt();
    		int charge;
    		
    		if(age<8) {
    			charge = 1000;
    			System.out.println("미취학 아동입니다.");
    		}
    		else if(age<14) {
    			charge = 2000;
    			System.out.println("초등학생입니다.");
    		}
    		else if(age<20) {
    			charge = 2500;
    			System.out.println("중고등학생입니다.");
    		}
    		else {
    			charge = 3000;
    			System.out.println("일반인입니다.");
    		}
    		System.out.println("입장료는 " + charge + "원입니다.");
    		
    		scan.close();
    	}
    }
    package kr.co.ezenac.decision;
    
    import java.util.Scanner;
    
    public class IfNestedTest {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		System.out.print("점수를 입력하세요 : ");
    		int score = scan.nextInt();
    		
    		if(score >= 90) {
    			/*
    			 * 중첩 if문은 보통, 2개를 초과하지 않도록 하는게 가독성 면에서 좋음
    			 * 
    			 */
    			if(score >= 95) {
    				System.out.println("당신은 A+ 등급입니다");
    			}
    			else {
    				System.out.println("당신은 A0 등급입니다");
    			}
    		}
    		else if(score >= 80) {
    			if(score >= 85) {
    				System.out.println("당신은 B+ 등급입니다");
    			}
    			else {
    				System.out.println("당신은 B0 등급입니다");
    			}
    		}
    		else {
    			System.out.println("더욱 분발해 주세요");
    		}
    		
    		scan.close();
    	}
    }
    package kr.co.ezenac.decision;
    
    import java.util.Scanner;
    
    public class IfElseTest {
    	
    	static final String ADMIN_ID = "admin";
    	static final String ADMIN_PASSWORD = "0311";
    	
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		
    		System.out.print("ID: ");
    		String id = scan.nextLine();
    		
    		System.out.print("PW: ");
    		String pw = scan.nextLine();
    		
    		if(id.equals(ADMIN_ID) && pw.equals(ADMIN_PASSWORD)) {
    			System.out.println("관리자 로그인 성공!");
    		}
    		else {
    			System.out.println("로그인 실패");
    		}
    		
    		scan.close();
    	}
    }



    3. 조건이 여러 개일 때 간단히 표현되는 switch ~ case 문
        1) switch ~ case 문
            - 가독성 좋게 구현, 한정된 값에는 사용하는게 좋음 (요일, 학점, 시간, 동서남북)
            - 비교 조건이 특정 값이나 문자열인 경우 사용
            - break문을 사용하여 각 조건이 만족되면 switch문 빠져나오도록 함

    package kr.co.ezenac.decision02;
    
    public class SwitchTest {
    
    	public static void main(String[] args) {
    		
    		int score = 10;
    		
    		// 조건 : int 이하의 정수 값, String 값이 들어옴
    		switch(score) {
    			case 95:
    				System.out.println("95점 입니다.");
    				break;
    			case 94:
    				System.out.println("94점 입니다.");
    				break;
    			case 93:
    				System.out.println("93점 입니다.");
    				break;
    			default:
    				System.out.println("잘못된 값입니다.");
    		}
    	}
    }

     

    package kr.co.ezenac.decision02;
    
    import java.util.Scanner;
    
    /*
     * 월을 입력하세요 :
     *  월은 일입니다.
     */
    
    public class SwitchCaseTest {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		System.out.print("월을 입력하세요 : ");
    		int month = scan.nextInt();
    		int day;
    		
    		switch(month) {
    			case 1 : case 3 : case 5 : case 7 : case 8 : case 10 : case 12 :
    				day = 31;
    				break;
    				
    			case 4 : case 6 : case 9 : case 11 :
    				day = 30;
    				break;
    				
    			case 2 :
    				day = 28;
    				break;
    				
    			default:
    				day = 0;
    				System.out.println("존재하지 않는 달입니다.");
    		}
    		System.out.println(month + "월은 " + day + "일입니다.");	
    		scan.close();
    	}
    }

     

    package kr.co.ezenac.decision02;
    
    public class SwitchNestedTest {
    	public static void main(String[] args) {
    		
    		int number = 9;
    		
    		switch(number) {
    			case 1:
    			case 7:
    				switch(number) {
    					case 1:
    						System.out.println("011 입니다");
    						break;
    					case 7:
    						System.out.println("017 입니다");
    						break;
    				}
    			case 6:
    			case 9:
    //				switch(number) {
    //				case 6: 
    //					System.out.println("016 입니다");
    //					break;
    //				case 9:
    //					System.out.println("019 입니다");
    //					break;
    //			}
    				if(number==6) {
    					System.out.println("016 입니다.");
    				}
    				else if(number==9) {
    					System.out.println("019 입니다.");
    				}
    				break;
    		}
    	}
    }


        2) java14부터 간단하게 쉼표(,)로 조건 구분
            식으로 표현해서 반환 값을 받을 수 있음  (yield 키워드 사용)

    package kr.co.ezenac.decision02;
    
    import java.util.Scanner;
    
    /*
     * 월을 입력하세요 :
     *  월은 일입니다.
     */
    
    public class SwitchCaseYieldTest {
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		System.out.print("월을 입력하세요 : ");
    		int month = scan.nextInt();
    		
    		int day = switch(month) {
    			case 1, 3, 5, 7, 8, 10, 12 -> {
    				System.out.println("한 달은 31일입니다.");
    				yield 31;
    			}	
    			case 4, 6, 9, 11 ->{
    				System.out.println("한 달은 30일입니다.");
    				yield 30;
    			}
    			case 2 ->{
    				System.out.println("한 달은 28일입니다.");
    				yield 28;
    			}			
    			default ->{
    				System.out.println("존재하지 않는 달입니다.");	
    				yield 0;
    			}
    		};
    		System.out.println(month + "월은 " + day + "일입니다.");
    		scan.close();
    	}
    }


    4. Math.random()을 이용해서 특정 범위의 정수 얻기 (난수)
        1) 0.0 <= math.random() < 1.0
            - 1 ~ 10 까지의 임의의 정수 얻기
                0.0 * 10 <= math.random() * 10 < 1.0 * 10

                (int)0.0 * 10 <= (int)Math.random() * 10 < (int)1.0 * 10
                0 <= (int)Math.random() * 10 < 10
                0 + 1 <= (int)Math.random() * 10 + 1 < 10 + 1
                1 <= (int)Math.random() * 10 + 1 < 11

                - 공식
                int num = (int)(Math.random() * n) + start

                - 주사위 번호 뽑기
                int num = (int)(Math.random() * 6) + 1

                - 로또
                int num = (int)(Math.random() * 45) + 1

     

    package kr.co.ezenac.decision02;
    
    public class RandomTest {
    	public static void main(String[] args) {
    		// Math.random() 값은 0.0부터 1미만 사이의 값을 발생 시킴
    		// System.out.println(Math.random());
    		
    		// 주사위 숫자 : 랜덤 발생
    		// int num = (int)(Math.random()*6);		// 0~5
    		int num = (int)(Math.random()*6) + 1;		// 1~6까지의 범위의 수를 발생시키는 식
    		System.out.println(num);
    		
    		// int lotto = (int)(Math.random()*45) + 1;	// 로또 번호 : 1에서 45까지의 숫자 중 6개 맞추면 됨
    		// System.out.print(lotto+ " ");
    		
    		if(num == 1) {
    			System.out.println(num + " 나왔네요.");
    		}
    		else if(num == 2) {
    			System.out.println(num + " 나왔네요.");
    		}
    		else if(num == 3) {
    			System.out.println(num + " 나왔네요.");
    		}
    		else if(num == 4) {
    			System.out.println(num + " 나왔네요.");
    		}
    		else if(num == 5) {
    			System.out.println(num + " 나왔네요.");
    		}
    		else {
    			System.out.println("6 나왔네요.");
    		}
    		
    		switch(num) {
    			case 1, 2, 3, 4, 5, 6 : 
    				System.out.println(num + " 나왔네요.");
    			break;
    		}
    	}
    }

     

    메서드를 이용한 사칙연산

    package kr.co.ezenac.decision02;
    
    public class MethodTest {
    	public static void main(String[] args) {
    		int num1 = 10;
    		int num2 = 30;
    		
    		int result = add(num1, num2);
    		System.out.println("num1 + num 2 = " + result);
    		
    		result = minus(num1, num2);
    		System.out.println("num1 - num 2 = " + result);
    		
    		result = multiply(num1, num2);
    		System.out.println("num1 * num 2 = " + result);
    		
    		result = division(num1, num2);
    		System.out.println("num1 / num2 = " + result);
    	}
    
    	public static int division(int x3, int y3) {
    		System.out.println("division 메서드 호출");
    		return x3 / y3;
    	}
    
    	public static int multiply(int x2, int y2) {
    		System.out.println("multiply 메서드 호출");
    		return x2 * y2;
    	}
    
    	public static int minus(int x1, int y1) {
    		System.out.println("minus 메서드 호출");
    		return x1 - y1;
    	}
    	
    	/*
    	 *  메서드의 선언부 구성 <= 중요도(98%), 메서드 구현부(정의부)
    	 *   1) 리턴타입(반환값) : int
    	 *   2) 메서드 이름
    	 *   3) () : 매개변수, 인자값, Arguments, 파라미터
    	 */
    
    	public static int add(int x, int y) {
    		System.out.println("add 메서드 호출");
    		return x + y;
    	}
    }

     

    System.out.printf(); 사용 방법

    package kr.co.ezenac.decision02;
    
    /*
     * printf() 사용할 때 주의사항
     * 	1) %문자와 넘겨받는 값의 종류가 다르면 에러가 발생함
     * 	2) 존재하지 않는 %문자를 사용하면 에러가 발생함
     * 	3) %문자의 개수보다 넘어오는 값의 개수가 많아도 문제 없음
     * 	4) %문자의 개수가 넘어오는 값의 개수보다 많으면 문제 있음
     */
    
    public class PrintfTest {
    	public static void main(String[] args) {
    		// 1. 10진법 정수(decimal)
    		int number = 2800;
    		System.out.println("=========1. Decimal=========");
    		
    		// 10진법 정수를 그대로 출력하라
    		System.out.printf("A. [%d]\n", number);	// A. [2800]
    		
    		// 10진법 정수를 오른쪽 정렬(default), 5자리로 출력하라 
    		System.out.printf("B. [%5d]\n", number); // B. [ 2800]
    		
    		// 10진법 정수를 오른쪽 정렬, 3자리로 출력하라 -> 4자리 그대로 출력됨
    		/*
    		 * 만약 출력해야할 내용이 지정된 자릿수보다 많으면
    		 * 자릿수 지정은 무시됨
    		 */
    		System.out.printf("C. [%3d]\n", number); // C. [2800]
    		
    		// 10진법 정수를 왼쪽 정렬, 5자리로 출력하라
    		System.out.printf("D. [%-5d]\n", number); // D. [2800 ]
    		
    		// 10진법 정수를 오른쪽 정렬(default), 5자리로 맞추고 왼쪽 공백은 0으로 채워라
    		System.out.printf("E. [%05d]\n", number); // E. [02800]
    		
    		
    		
    		// 2. 16진법 정수(he'x'a decimal)
    		number = 1787;
    		System.out.println("=======2. Hexadecimal=======");
    		
    		// 16진법 정수를 자릿수는 그대로, 알파벳은 소문자로 출력하라
    		System.out.printf("A. [%x]\n", number); // A. [6fb]
    		
    		// 16진법 정수를 자릿수는 그대로, 알파벳은 대문자로 출력하라
    		System.out.printf("B. [%X]\n", number); // B. [6FB]
    		
    		// 16진법 정수를 자릿수는 5로, 오른쪽 정렬, 알파벳은 대문자로 출력하라
    		System.out.printf("C. [%5X]\n", number); // C. [  6FB]
    		
    		// 16진법 정수를 자릿수는 5로, 왼쪽 정렬, 알파벳은 소문자로 출력하라
    		System.out.printf("D. [%-5x]\n", number); // D. [6fb  ]
    		
    		// 16진법 정수를 자릿수는 5로, 오른쪽 정렬, 알파벳은 대문자, 왼쪽 공백은 0으로 출력하라
    		System.out.printf("E. [%05X]\n", number); // E. [006FB]
    		
    		
    		
    		System.out.println("==========3. float==========");
    		/*
    		 * 실수 ('f'loat)
    		 * %f를 사용하지만 double 값을 넣어도 됨
    		 */
    		
    		double d = 123.45;
    		// 실수를 그대로 출력
    		System.out.printf("A. [%f]\n", d);	// A. [123.450000]
    		
    		// 실수를 15자리 오른쪽 정렬로 출력
    		System.out.printf("B. [%15f]\n", d);	// B. [     123.450000]
    		
    		// 실수를 소수점 첫 번째 자리까지 출력
    		System.out.printf("C. [%.1f]\n", d);	// C. [123.5]
    		
    		// 실수를 15자리 오른쪽 정렬, 소수점 첫 번째 자리까지 출력
    		System.out.printf("D. [%15.1f]\n", d);	// D. [          123.5]
    		
    		// 실수를 15자리 왼쪽 정렬, 소수점 세 번째 자리까지 출력
    		System.out.printf("E. [%-15.3f]\n", d);	// E. [123.450        ]
    		
    		// 실수를 15자리 오른쪽 정렬, 왼쪽 빈 자리는 0으로, 소수점 세 번째 자리까지 출력
    		System.out.printf("F. [%015.3f]\n", d);	// F. [00000000123.450]
    		
    		
    		
    		System.out.println("=========4. 'S'tring=========");
    		String str = new String("abcDEF");
    		
    		// String을 그대로 출력
    		System.out.printf("A. [%s]\n", str);	// A. [abcDEF]
    		
    		// String을 대문자로 바꿔서 출력
    		System.out.printf("B. [%S]\n", str);	// B. [ABCDEF]	
    	}
    }

     

     

    댓글