Java

제어문 - 조건문(if, switch)

ZIAHO 2021. 9. 14. 09:30
  • 제어문 : 여러 경우의 수를 가지고 프로그램을 원하는 방향으로 작동하게 하는 문장

                 (= 프로그램 수행 흐름을 바꾸는 역할)

 

  • 조건문 : 조건에 따라서 다른 문장이 수행되도록 한다. 조건에 따라서 다른 길을 가게 한다.
    • if문
    • if문의 기본 형식
      // if문의 기본 형식
      if(조건식) { // 조건식에는 boolean형 자체나 boolean값을 가지는 메소드가 들어가기도 한다.
      	조건식의 결과값이 true 일 경우 실행할 내용
      }
      
      // 예시
      if(num > 0) { // num이 0보다 크다면 {}안의 내용을 실행해라
      	System.out.println("num은 양수입니다.");
      }​
    • 기본 if문의 설정범위
      1. if문의 범위는 if문 실행시에만 사용할 수 있는 영역이다.
      2. if문 내부영역에서는 if를 포함하고 있는 영역(메소드영역)에 선언된 변수를 사용 할 수 있다.
      3. if문 내부에서 선언한 변수는 if문 외부에서 사용 불가능하다.
        // 기본 if문의 설정범위 내용
        // if문의 범위는 if문 실행시에만 사용할 수 있는 영역이다.
        // if문 내부영역에서는 if를 포함하고 있는 영역(메소드영역)에 선언된 변수를 사용할 수 있다.
        
        String name = "";
        int num = 10;
        if(num > 5 && apple.equals("사과") {
        	name = "홍길동"; // if문 외부에서 선언된 변수를 if문 내부에서 선언하면 안된다.
            int banana = 3;
            System.out.println(name + "님은 " + apple + "를 " + num + "개 먹었네요.);
            // 홍길동님은 사과를 10개 먹었네요.
        }
        // System.out.println(banana); // 에러발생, if 내부에서 선언한 변수는 외부에서 사용이 불가능하다.​​
      4. 실습
        // 국어, 영어, 수학 점수를 입력받고
        // 합계와 평균을 계산, 출력하고
        // 각 과목의 점수가 60점 이상이면서 평균이 60점 이상이면 "합격!",
        // 그렇지 않으면 "불합격!" 을 출력해보자.
        Scanner sc = new Scanner(System.in);
        		
        System.out.print("국어 점수 : ");
        int kor = sc.nextInt(); // 국어 점수 입력받기
        System.out.print("영어 점수 : ");
        int eng = sc.nextInt(); // 영어 점수 입력받기
        System.out.print("수학 점수 : ");
        int math = sc.nextInt(); // 수학 점수 입력받기
        		
        int sum = kor + eng + math; // 과목의 총합 점수
        double avg = sum / 3.0; // 평균점수
        		
        if(kor >= 60 && eng >= 60 && math >= 60 && avg >= 60) { // 조건식 작성
        	System.out.println("합격");
        }​
    • if ~ else문 => 반드시 if문 또는 else문 중 하나는 실행된다. 양자택일
    • if ~ else문의 형식
      // if ~ else 기본형식
      if(조건식) {
      	조건식의 결과값이 true일 때 실행할 내용;
      } else {
      	조건식의 결과값이 false일 때 실행할 내용;
      }
      
      // 예시
      if(num % 2 == 0) { // num을 2로 나눈 나머지 값이 0이면
      	System.out.println("짝수"); // 짝수 출력
      } else { // 그렇지 않으면
      	System.out.println("홀수") // 홀수 출력
      }​
    • if문을 다중으로 사용해서 if ~ else문으로 대체? => 둘의 차이점이 있음
      1. if를 다중으로 사용 : 각 if문을 모두 확인하고 실행. 즉, 조건에 맞으면 모든 if문을 실행.
      2. if ~ else : 둘 중 하나만 실행(양자택일)
      3. if ~ else문 실습
        // if ~ else문 실습
        // 2개의 정수를 입력받고 크기를 비교해서 큰 수를 출력해보자
        Scanner sc = new Scanner(System.in);
        
        System.out.print("첫번째 정수 : ");
        int a = sc.nextInt();
        System.out.print("두번째 정수 : ");
        int b = sc.nextInt();
        
        if(a > b) {
        	System.out.println(a + "와(과) " + b + "중 더 큰수는 " + a + "입니다.");
        } else {
        	System.out.println(a + "와(과) " + b + "중 더 큰수는 " + b + "입니다.");
        }​
    • if ~ else if ~ [else]문
      1. 추가적인 경우의 수를 확인하는 구문을 작성할때 사용
        // if ~ esle if ~ [else] 실습!
        // 월을 입력하면 계절을 알려주는 로직 작성해보기
        Scanner sc = new Scanner(System.in);
        		
        System.out.print("계절을 확인하고 싶은 월을 입력하세요 : ");
        int month = sc.nextInt();
        
        if(month == 1 || month == 2 || month == 12) {
        	System.out.println(month + "월은 겨울입니다.");
        } else if(month >= 3 && month <= 5 ) {
        	System.out.println(month + "월은 봄입니다.");
        } else if(month >= 6 && month <= 8) {
        	System.out.println(month + "월은 여름입니다.");
        } else if(month >= 9 && month <= 11) {
        	System.out.println(month + "월 가을입니다.");
        } else {
        	System.out.println("1 부터 12 사이의 숫자만 입력해주세요");
        }​
    • 종합 실습
      // 성인만 가입할 수 있는 회원가입 -> 미성년자는 "회원가입 불가합니다." 출력
      // 성인이면 내국인, 외국인으로 구분하고
      // 내국인이면 회원가입으로 바로 이동 -> 이름, 주소를 저장 출력
      // 외국인이면 외국인 등록번호 여부를 확인하고(있다/없다), 있으면 회원가입으로 이동 
      // -> 이름, 주소 저장 출력
      // 없으면 "회원가입이 불가능합니다." 출력
      // 선택을 잘못한 경우 -> "잘못 누르셨습니다." 출력 후 종료
      Scanner sc = new Scanner(System.in);
      		
      System.out.print("당신의 나이는? : ");
      int age = sc.nextInt();
      		
      if(age > 19) {
      	// 성인일때 수행하는 로직
      	System.out.print("당신은 내국인입니까? 외국인입니까?(1.내국인 2.외국인) : ");
      	int foreign = sc.nextInt();
      	if(foreign == 1) {
          	// 1.내국인을 선택했을때 실행하는 로직
      		System.out.println("===== 회 원 가 입 =====");
      		System.out.print("이름을 입력하세요 : ");
      		String name = sc.next();
      		sc.nextLine();
      		System.out.print("주소를 입력하세요 : ");
      		String address = sc.nextLine();
      		System.out.println("===== 회원가입 성공 =====");
      		System.out.println("이름 : " + name + " 주소 : " + address);
      	} else if(foreign == 2) {
          	// 2.외국인을 선택했을때 실행하는 로직
      		System.out.print("외국인 등록번호를 가지고 있습니까?(1.예 2.아니오)");
      		int forNum = sc.nextInt();
      		if(forNum == 1) {
              	// 1.예를 선택했을때 실행하는 로직
      			System.out.println("===== 회 원 가 입 =====");
      			System.out.print("이름을 입력하세요 : ");
      			String name = sc.next();
      			sc.nextLine();
      			System.out.print("주소를 입력하세요 : ");
      			String address = sc.nextLine();
      			System.out.println("===== 회원가입 성공ㄹ =====");
      			System.out.println("이름 : " + name + " 주소 : " + address);
      		} else if(forNum == 2) {
              	// 2.아니오를 선택했을때 실행하는 로직
      			System.out.println("등록번호가 없으면 회원가입이 불가능합니다.");
      		} else {
              	// 1.예나 2.아니오 이외에 다른 숫자를 입력했을 때 실행하는 로직
      			System.out.println("잘못 입력하셨습니다.");
      		}
      	} else {
          	// 1.내국인이나 2.외국인 이외에 다른 숫자를 입력했을때 실행하는 로직
      		System.out.println("잘못 입력하셨습니다.");
      	}
      } else {
      	// 미성년자일때 수행하는 로직
      	System.out.println("미성년자는 회원가입이 불가능합니다.");
      }
  • switch문
    • switch는 정해진 값이 있는 조건문을 만들 때 사용한다.
    • 메뉴를 만들때, 특정값에 대해 동등비교해서 조건을 만들때 주로 사용한다.
    • 조건식의 결과 값과 일치하는 case문으로 이동
    • default문은 일치하는 case문이 없을 때 수행한다(= if문의 else)
    • 같은 내용을 if문으로 작성했을 때 보다 조금 더 간결하고 깔끔하게 작성가능하다.
    • 👍 switch문의 조건식의 결과에는 정수, 문자, 문자열만 가능하다. + 산술연산은 들어갈 수 있다. => 연산의 결과가 나오기 때문에!!
    • case : 이후 부분에는 통상 기능을 호출해서 사용한다.
      // 조건문 switch에 대해 알아보자
      // switch는 정해진 값이 있는 조건문을 만들 때 사용한다.
      // 메뉴를 만들때 많이 사용, 특정값에 대해 동등비교해서 조건을 만들때 사용한다.
      
      // 호프집 메뉴판을 보고 원하는 메뉴를 입력하면 가격을 알려주는 로직 만들어보기!
      // 1.치킨 : 12,000원  2.닭똥집 : 10,000원  3.소주 : 3,000원  4.맥주(500cc) : 2,500원  
      Scanner sc = new Scanner(System.in);
      		
      System.out.println("===== 메 뉴 판 =====");
      System.out.println("1.치킨  2.닭똥집  3.소주  4.맥주(500cc)");
      System.out.print("원하는 메뉴의 번호를 입력해주세요 : ");
      int choice = sc.nextInt();
      switch (choice) {
      	case 1 : System.out.println("치킨은 12,000원 입니다."); break; // break 이후의 case는 출력하지 않는다.
      	case 2 : System.out.println("닭똥집은 10,000원 입니다."); break; // break문을 작성하지 않으면 나머지 case까지 모두 출력되버린다.
      	case 3 : System.out.println("소주는 3,000원 입니다."); break; // 보통 case에는 이런식으로 작성하지 않고 기능을 호출해서 사용한다.
      	case 4 : System.out.println("맥주는 2,500원 입니다."); break; // 아직 잘 몰라서 이렇게 함. ㅎ
      	default : System.out.println("없는 메뉴입니다.");
      }​

 

  • 마지막으로 if문 종합실습 일부를 switch문으로 변경해서 작성해보자!!!!
    Scanner sc = new Scanner(System.in);
    		
    System.out.print("당신의 나이는? : ");
    int age = sc.nextInt();
    		
    if(age > 19) {
    	System.out.print("당신은 내국인입니까? 외국인입니까?(1.내국인 2.외국인) : ");
    	int foreign = sc.nextInt();
    	switch(foreign) {
    		case 1 : System.out.println("===== 회 원 가 입 =====");
    				System.out.print("이름을 입력하세요 : ");
    				String name = sc.next();
    				sc.nextLine();
    				System.out.print("주소를 입력하세요 : ");
    				String address = sc.nextLine();
    				System.out.println("===== 회원가입 성공 =====");
    				System.out.println("이름 : " + name + " 주소 : " + address); break;
    		case 2 : System.out.print("외국인 등록번호를 가지고 있습니까?(1.예 2.아니오)");
    				int forNum = sc.nextInt();
    				switch (forNum) {
    					case 1 :System.out.println("===== 회 원 가 입 =====");
    						System.out.print("이름을 입력하세요 : ");
    						name = sc.next();
    						sc.nextLine();
    						System.out.print("주소를 입력하세요 : ");
    						address = sc.nextLine();
    						System.out.println("===== 회원가입 성공 =====");
    						System.out.println("이름 : " + name + " 주소 : " + address); break;
    					case 2 : System.out.println("등록번호가 없으면 회원가입이 불가능합니다."); break;
    					default : System.out.println("잘못 입력하셨습니당 ㅎㅎ."); break;
    				}
    		default : System.out.println("잘못 입력하셨습니다."); break; // 이게 왜 나오지; -> 해결책 찾아봐야함 ㅠ
    	}
    } else {
    	System.out.println("미성년자는 회원가입이 불가능합니다.");
    }​