-
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) + 1package 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] } }
'개발자 수업 > Java' 카테고리의 다른 글
6. Review / 7.객체지향프로그램 (0) 2021.10.04 5. 반복문 (while문, do~while문, for문) (0) 2021.10.01 210929 / 대입 연산자, 부호 연산자, 산술 연산자, 증가&감소 연산자, 관계 연산자, 논리 연산자, 조건 연산자 (0) 2021.09.29 210929 / 진수, 변수, 부동 소수점 방식, 문자형, 논리형, 상수, 리터럴, 형변환 (0) 2021.09.29 210928 / 다운로드, 프로그래밍, 자바, 변수 (0) 2021.09.28