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문의 설정범위
- if문의 범위는 if문 실행시에만 사용할 수 있는 영역이다.
- if문 내부영역에서는 if를 포함하고 있는 영역(메소드영역)에 선언된 변수를 사용 할 수 있다.
- 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 내부에서 선언한 변수는 외부에서 사용이 불가능하다.
- 실습
// 국어, 영어, 수학 점수를 입력받고 // 합계와 평균을 계산, 출력하고 // 각 과목의 점수가 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문으로 대체? => 둘의 차이점이 있음
- if를 다중으로 사용 : 각 if문을 모두 확인하고 실행. 즉, 조건에 맞으면 모든 if문을 실행.
- if ~ else : 둘 중 하나만 실행(양자택일)
- 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]문
- 추가적인 경우의 수를 확인하는 구문을 작성할때 사용
// 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("미성년자는 회원가입이 불가능합니다."); }