✅ 답안과 비교하여 스스로 코드 개선점 짚어보기 완료(2021.12.26)
BASIC1.
package com.greedy.section01.conditional.level01.basic;
import java.util.Scanner;
public class Application1 {
public static void main(String[] args) {
/* 정수를 하나 입력 받아 그 수가 양수이면 "양수다." 라고 출력하고,
* 양수가 아닌 경우 "양수가 아니다." 라고 출력하세요
*
* -- 입력 예시 --
* 정수를 하나 입력하세요 : 5
*
* -- 출력 예시 --
* 양수다.
* */
Scanner scanner = new Scanner(System.in);
System.out.print("정수를 하나 입력하세요 : ");
int num = scanner.nextInt();
if(num > 0) {
System.out.println("양수다.");
} else {
System.out.println("양수가 아니다.");
}
}
}
BASIC2.
package com.greedy.section01.conditional.level01.basic;
import java.util.Scanner;
public class Application2 {
public static void main(String[] args) {
/* 정수를 입력 받아 그 수가 짝수인지 홀수인지 판단해서 결과를 출력하세요
* 짝수인 경우 "짝수다." 출력, 홀수인 경우 "홀수다." 출력
*
* -- 입력 예시 --
* 정수를 하나 입력하세요 : 5
*
* -- 출력 예시 --
* 홀수다.
* */
Scanner scanner = new Scanner(System.in);
System.out.print("정수를 하나 입력하세요 : ");
int num = scanner.nextInt();
if(num % 2 == 0) {
System.out.println("짝수다.");
} else {
System.out.println("홀수다.");
}
}
}
NORMAL1.
중첩 if문을 활용해 조건들을 나열할 수 있다.
package com.greedy.section01.conditional.level02.normal;
import java.util.Scanner;
public class Application1 {
public static void main(String[] args) {
/* 1~10 사이의 정수 한개를 입력받아 홀수인지 짝수인지 인지 확인하고,
* 홀수이면 "홀수다.", 홀수가 아니면 "짝수다." 라고 출력하세요.
* 단, 1~10 사이의 정수가 아닌 경우 "반드시 1~10 사이의 정수를 입력해야 합니다." 를 출력하세요.
* */
Scanner scanner = new Scanner(System.in);
System.out.print("1 ~ 10 사이 정수를 하나 입력하세요. > ");
int num = scanner.nextInt();
if(1 <= num && num <= 10) {
if(num % 2 != 0) {
System.out.println("홀수다.");
} else {
System.out.println("짝수다.");
}
} else {
System.out.println("반드시 1~10 사이의 정수를 입력해야 합니다.");
}
}
}
NORMAL2.
int kg → double kg 자료형 통일되게 조정한다.
"당신은 ~ 입니다." 문구 중복되므로 → result 변수 생성해 → if문에서 result 대입한다.
20~25 또는 25~30 범위 중복되므로 → 간략히 수정한다.
package com.greedy.section01.conditional.level02.normal;
import java.util.Scanner;
public class Application2 {
public static void main(String[] args) {
/* BMI(신체질량지수)를 계산하고, 계산된 값에 따라
* 저체중(20 미만)인 경우 "당신은 저체중 입니다.",
* 정상체중(20이상 25미만)인 경우 "당신은 정상체중 입니다.",
* 과제충(25이상 30미만)인 경우 "당신은 과체중 입니다.",
* 비만(30이상)인 경우 "당신은 비만 입니다." 를 출력하세요
*
* BMI 계산 방법은 체중(kg) / (신장(m) * 신장(m)) 이다.
*
* 계산 예시) BMI = 67 / (1.7 * 1.7)
* */
Scanner scanner = new Scanner(System.in);
System.out.print("체중을 입력하세요. > ");
double kg = scanner.nextDouble();
System.out.print("신장을 입력하세요. > ");
double m = scanner.nextDouble() / 100;
double bmi = kg / (m * m);
String result = "";
if(bmi < 20) {
result = "저체중";
} else if(bmi < 25) {
result = "정상체중";
} else if(bmi < 30) {
result = "과체중";
} else {
result = "비만";
}
System.out.println("당신은 " + result + "입니다.");
}
}
HARD1.
출력문을 각 case마다 지정하게 되면 수정 작업에 어려움을 겪을 수 있다. 출력문 형식은 switch문 하단에 넣고, case 안에서는 result 변수를 통해 값만 바뀌도록 한다.
❗ default > return; 활용할 것
package com.greedy.section01.conditional.level03.hard;
import java.util.Scanner;
public class Application1 {
public static void main(String[] args) {
/* 두 개의 정수를 입력 받아 변수에 저장하고,
* 연산기호(+, -, *, /, %)를 입력 받아 해당 연산의 수행 결과를 출력하세요.
* 단, 준비된 연산기호 외의 문자를 입력하는 경우 "입력하신 연산은 없습니다. 프로그램을 종료합니다." 출력 후 프로그램 종료
*
* -- 입력 예시 --
* 첫 번째 정수 : 4
* 두 번쨰 정수 : 3
* 연산 기호를 입력하세요 : +
*
* -- 출력 예시 --
* 4 + 3 = 7
*/
Scanner scanner = new Scanner(System.in);
System.out.print("첫 번째 정수 : ");
int first = scanner.nextInt();
System.out.print("두 번째 정수 : ");
int second = scanner.nextInt();
System.out.print("연산기호를 입력하세요 : ");
char sign = scanner.next().charAt(0);
int result = 0;
switch(sign) {
case '+' :
result = first + second;
break;
case '-' :
result = first - second;
break;
case '*' :
result = first * second;
break;
case '/' :
result = first / second;
break;
case '%' :
result = first % second;
break;
default:
System.out.println("입력하신 연산은 없습니다. 프로그램을 종료합니다.");
return; //넣어줘야 이 문구가 다른 조건에서 출력되지 않음
}
System.out.println(first + " " + sign + " " + second + " " + "= " + result );
}
}
HARD2.
중복된 출력문 문구를 switch문 최하단으로 옮겨 고정할 수 있다. 나중에 문구 수정에 유리해진다.
default 구문에서 return;을 명시해 속해 있는 조건문을 빠져나오도록 명령해야 한다.
❗ scanner.close();
package com.greedy.section01.conditional.level03.hard;
import java.util.Scanner;
public class Application2 {
public static void main(String[] args) {
/* 과일 이름("사과", "바나나", "복숭아", "키위") 중 한 가지를 문자열로 입력하면
* 해당하는 가격에 맞게 상품명과 가격이 출력되게 하세요.
* 단, 목록에 없는 과일을 입력 시 "준비된 상품이 없습니다." 출력 후 프로그램 종료
*
* -- 상품 가격 --
* 사과 : 1000원
* 바나나 : 3000원
* 복숭아 : 2000원
* 키위 : 5000원
*
* -- 입력 예시 --
* 과일 이름을 입력하세요 : 바나나
*
* -- 출력 예시 --
* 바나나의 가격은 3000원 입니다.
* */
Scanner scanner = new Scanner(System.in);
System.out.print("과일 이름 입력하세요. > ");
String fruit = scanner.nextLine();
scanner.close(); //스캐너 종료
int price = 0;
switch(fruit) {
case "사과":
price = 1000;
break;
case "바나나":
price = 3000;
break;
case "복숭아":
price = 2000;
break;
case "키위":
price = 5000;
break;
default:
System.out.println("준비된 상품이 없습니다.");
return;
}
System.out.println(fruit + "의 가격은 " + price + "원입니다.");
}
}
ADVANCED1.
모든 조건을 만족하는 외부 if문을 먼저 세운다.
그리고 여기서 false인 값들은 외부 else문 안에서 조건을 다시 따지도록 한다.
조건마다 else if문이 아닌 각각의 if문으로 작성해야 누적 출력이 가능하다.
package com.greedy.section01.conditional.level04.advanced;
import java.util.Scanner;
public class Application1 {
public static void main(String[] args) {
/* 국어, 영어, 수학 점수를 입력받아
* 평균 점수가 60점 이상이면서 각 과목이 40점 이상인 조건이 만족하면 "합격입니다!" 를 출력하세요,
* 단, 합격이 아닌 경우 불합격 사유가 무엇인지를 모두 출력해주어야 합니다.
* 평균점수 미달인 경우 "평균점수 미달로 불합격입니다." 라고 출력하고,
* 과목당 과락 점수가 있는 경우 "xx 과목의 점수 미달로 불합격 입니다." 출력하세요
*
* -- 입력 예시 --
* 국어 점수를 입력하세요 : 60
* 영어 점수를 입력하세요 : 30
* 수학 점수를 입력하세요 : 20
*
* -- 출력 예시 --
* 평균 점수 미달로 불합격입니다.
* 영어 점수 미달로 불합격입니다.
* 수학 점수 미달로 불합격입니다.
* */
Scanner scanner = new Scanner(System.in);
System.out.print("국어 점수를 입력하세요 : ");
int kor = scanner.nextInt();
System.out.print("영어 점수를 입력하세요 : ");
int eng = scanner.nextInt();
System.out.print("수학 점수를 입력하세요 : ");
int math = scanner.nextInt();
int average = (kor + eng + math) / 3;
if(average >= 60 && kor >= 40 && eng >= 40 && math >= 40) {
System.out.println("합격입니다!");
} else {
if(average < 60) {
System.out.println("평균 점수 미달로 불합격입니다.");
}
if(kor < 40) {
System.out.println("국어 점수 미달로 불합격입니다.");
}
if(eng < 40) {
System.out.println("영어 점수 미달로 불합격입니다.");
}
if(math < 40){
System.out.println("수학 점수 미달로 불합격입니다.");
}
}
}
}
ADVANCED2.
int bonusAmount = 0;로 변수 선언만 들어갔어도 될 자리에 int bonusAmount = sales * bonusPercentage / 100; 한 줄 문장을 그대로 뒀어선지 정상 실행되지가 않았었다.
double → int 형변환 순서에 주의하자. double 값을 소괄호()로 묶어 double 결과를 낸 후 int형으로 변환하여야 원하는 한 자리 숫자를 얻을 수 있다.
package com.greedy.section01.conditional.level04.advanced;
import java.util.Scanner;
public class Application2 {
public static void main(String[] args) {
/* 영업사원의 월급을 계산하는 프로그램을 작성하려고 합니다.
* 월 급여액과 월 매출액을 입력 받아 급여를 산정합니다.
* 영업사원은 매출액 대비 보너스율에 명시된 보너스를 급여 외에 추가로 지급받습니다.
*
* 단, 보너스율은 입력 받은 월 매출액에 비례하며,
* 계산된 보너스 금액을 월 급여액에 더하여 총 급여를 계산한다.
*
* 보너스율을 적용하여 출력 예시처럼 출력되도록 프로그램을 만들어보세요
*
* -- 총 급여 계산식 --
* 총 급여 = 월 급여 + (매출액 * 보너스율)
*
* -- 매출액 대비 보너스율 --
* 매출액 보너스율
* 5천만원 이상 5%
* 3천만원 이상 3%
* 1천만원 이상 1%
* 1천만원 미만 0%
*
* -- 입력 예시 --
* 월 급여 입력 : 3000000
* 매출액 입력 : 20000000
*
* -- 출력 예시 --
* ======================
* 매출액 : 20000000
* 보너스율 : 1%
* 월 급여 : 3000000
* 보너스 금액 : 200000
* ======================
* 총 급여 : 3200000
* */
Scanner scanner = new Scanner(System.in);
System.out.print("월 급여 입력 : ");
int salary = scanner.nextInt();
System.out.print("매출액 입력 : ");
int sales = scanner.nextInt();
double bonusRate = 0.0;
if(sales >= 50_000_000) {
bonusRate = 0.05;
} else if(sales >= 30_000_000) {
bonusRate = 0.03;
} else if(sales >= 10_000_000) {
bonusRate = 0.01;
} else {
bonusRate = 0;
}
int totalAmount = salary + (int)(sales * bonusRate);
System.out.println("======================");
System.out.println("매출액 : " + sales);
System.out.println("보너스율 : " + (int)(bonusRate * 100) + "%");
System.out.println("월 급여 : " + salary);
System.out.println("보너스 금액 : " + (int)(sales * bonusRate));
System.out.println("======================");
System.out.println("총 급여 : " + totalAmount);
}
}
'Java' 카테고리의 다른 글
[JAVA] 4-2. 반복문 for, while (0) | 2021.12.24 |
---|---|
조건문 수업 Quiz (0) | 2021.12.24 |
[JAVA] 4-1. 조건문 if, switch (0) | 2021.12.23 |
[JAVA] 3-2. Math, Random, Scanner 클래스 (0) | 2021.12.23 |
메소드 수업 practice (0) | 2021.12.23 |