21.08.18 - 웹 개발 입문 6일차
Q. 12시 34분에 주차장에 들어와서 15시 21분에 나간 차량이 있습니다.
1. 이 차량의 주차시간을 구하여 출력
2. 10분당 주차요금이 500원일 때, 이 차량의 주차요금을 계산하여 출력
- 10분 미만 : 0원, 10분 ~ 19분 : 500원, 20분 ~ 29분 : 1000원, 그 뒤는 전과 동일
3. 2시간 넘게 주차한 차량은 요금 할인이 들어가므로 2시간이 넘었는지 판정하여 출력
package total;
import java.lang.*;
public class test01 {
public static void main(String[] args) {
//입력
int inHour = 12, inMinute = 34; // 입장시간
int outHour = 15, outMinute = 21; // 퇴장시간
int price = 500; //10분당 주차 요금
int pirceTime = 10;; /// 요금 분 기준
//처리
int inTime = inHour * 60 + inMinute; // 입장시간 분리
int outTime = outHour * 60 + outMinute; //퇴장시간 분리
int time = outTime - inTime; // 총 주차 시간
int hour = time / 60; // 시간 으로 표시
int minute = time % 60; // 분 으로 표시
int totalTime = (hour * 60) + minute; // 시간 + 분 = 분으로 표시
int totalPrice = price*(totalTime/pirceTime); // 주차 요금 계산
boolean Discount = hour >= 2; // 2시간 이상 주차 할인 대상
//출력(결과)
System.out.println("총 주차 시간 = " + hour+"시간 " + minute+"분");
System.out.println("총 주차 요금 = " + totalPrice + "원");
System.out.println("할인 대상 = " + Discount);
//System.out.println("할인 후 요금 = " + "?" + "원");
}
}
- 정답
총 주차 시간 = 2시간 47분
총 주차 요금 = 8000원
할인 대상 = true
표준 출력 통로(Sysout.out)를 이용 하는 방법
- println 명령 : 안에 적힌 글자 또는 수식을 계산하여 한 줄 단위로 출력
- print 명령 : 안에 적힌 글자 또는 수식을 계산하여 있는 그대로 출력
- printf 명령 : C언어 사용자들에게 친숙한 형태의 출력 방식
%d - 정수 출력 홀더 , %f - 실수, %c - 단일문자, %s - 문자열
package output;
import java.lang.*;
public class test01 {
public static void main(String[] args) {
System.out.println("안녕하세요1");
System.out.println("안녕하세요2");
System.out.print("안녕하세요3");
System.out.print("안녕하세요4");
// 줄바꿈 방법
System.out.print("\n");
System.out.println();
System.out.println("안녕하세요5");
int a = 10;
int b = 20;
System.out.print("a = ");
System.out.print(a);
System.out.print(", b = ");
System.out.print(b);
System.out.print("\n");
System.out.println("a = " + a + ", b = " + b );
System.out.printf("a = %d, b = %d\n",a,b);
}
}
- 정답
안녕하세요1
안녕하세요2
안녕하세요3안녕하세요4
안녕하세요5
a = 10, b = 20
a = 10, b = 20
a = 10, b = 20
System.in.read() 예제
앞으로 사용하지 않지만 알아야하는 입력의 기초 개념
- System.in의 명령을 이용하여 입력을 받는다.
- 입력 통로와의 연결이 이루어지지 않았을 경우에는 오류(예외)가 발생
- ascii 코드 한 개를 읽어온다(unincode가 아님)
- 다양한 입력을 처리하기가 매우 어렵다
- 다른 추가 도구들을 사용하여 위의 문제점들을 해결한 방식으로 입력받는다
- Scanner, BufferedInputStream, ...
Scanner 예제
목표 : Scanner 라는 도구를 활용하여 효과적으로 System.in 읽기 수행
Scanner 기능 중에는 글자를 모아서 원하는 형태로 반환하는 기능이 있다
기본적으로 제공되는 도구가 아닌 추가로 만들어야 하는 도구는 생성 코드가 필요
package input;
import java.lang.*;
import java.util.Scanner;
public class test02 {
public static void main(String[] args) {
// 도구 생성
Scanner sc = new Scanner(System.in);
// 도구 사용
int a = sc.nextInt(); // 정수
System.out.println("a = " + a );
String b = sc.next(); // 문자열
System.out.println("b = " + b);
// 도구 종료(소멸)
sc.close();
}
}
- 정답
100 (입력)
a = 100 (출력)
홍길동 (입력)
b = 홍길동 (출력)
Q. 사용자에게 다음의 정보를 입력받아 요구사항에 맞게 계산 후 출력
입력받을 정보
-이름, -국어점수, -영점수
출력할 정보
- 이름, -총점, -평균
package input;
import java.lang.*;
import java.util.Scanner;
public class test03 {
public static void main(String[] args) {
//입력
// 도구 생성
Scanner sc = new Scanner(System.in);
// 도구 사용
System.out.println("이름을 입력하세요");
String name = sc.next(); // 이름
System.out.println("국어점수를 입력하세요");
int korean = sc.nextInt(); // 국어점수
System.out.println("영어점수를 입력하세요");
int english = sc.nextInt(); // 영어점수
// 도구 종료
sc.close();
//처리
double number = 2; // 과목수
int sum = korean+english; // 총점
double avg = (korean+english)/number; //평균
//결과
System.out.println("이름 = " + name);
System.out.println("총점 = " + sum + "점");
System.out.println("평균 = " + avg + "점");
}
}
- 정답
이름을 입력하세요
홍길동
국어점수를 입력하세요
100
영어점수를 입력하세요
100
이름 = 홍길동
총점 = 200점
평균 = 100.0점
Q. 과거에 만들었던 BMi 계산기에 입력 기능을 더해서 다음 요구사항에 맞게 구현
참고 : double은 sc.nextDouble()이라는 명령으로 입력 가능
입력 : 이름, 신장(cm), 체중(kg)
처리 : BMI 수치 , 과체중인지 판정( BMI가 24.5 이상 이면 과체중)
출력 : 계산된 BMI 수치, 과체정 여부(true/false)
package input;
import java.lang.*;
import java.util.Scanner;
public class test04 {
public static void main(String[] args) {
//입력
// 도구 생성
Scanner sc = new Scanner(System.in);
// 도구 사용
System.out.println("이름을 입력하세요");
String name = sc.next(); // 이름
System.out.println("신장(cm) 입력하세요");
double cm = sc.nextDouble(); // 신장
System.out.println("체중(kg) 입력하세요");
double kg= sc.nextDouble(); // 체중
// 도구 종료
sc.close();
//처리
double m = (double) cm /100; // 체중 m단위로 변경
double bmi = kg / (m * m); // bmi 계산
boolean bmiOver = bmi >= 24.5 ; // 과체정 여부
//결과
System.out.println("이름 = " + name);
System.out.println("BMI 수치 = " + bmi );
System.out.println("과체중 여부 = " + bmiOver);
}
}
정답 -
이름을 입력하세요
홍길동
신장(cm) 입력하세요
180
체중(kg) 입력하세요
80
이름 = 홍길동
BMI 수치 = 24.691358024691358
과체중 여부 = true
Q. 과거에 만들었던 PC방 프로그램에 입력기능 더해서 다음 요구사항에 맞게 구현
- 입력정보
시작 시각, 종료 시각
- 처리
이용 요금 : 1시간 당 1000원
- 결과
이용시간, 계산된 이용요금(원)
package input;
import java.lang.*;
import java.util.Scanner;
public class test05 {
public static void main(String[] args) {
//입력
Scanner sc = new Scanner(System.in);
System.out.println("시작 시각을 입력하세요");
int inHour = sc.nextInt();
int inMinute = sc.nextInt();
System.out.println("종료 시각을 입력하세요");
int outHour = sc.nextInt();
int outMinute = sc.nextInt();
sc.close();
int price = 1000;
//처리
int inTime = inHour * 60 + inMinute;
int outTime = outHour * 60 + outMinute;
int time = outTime - inTime;
int hour = time / 60;
int minute = time % 60;
int pricePerMinute = price / 60;
int totalPrice = time * pricePerMinute;
totalPrice = totalPrice / 100 * 100; // 버림
// totalPrice = (totalPrice + 50) / 100 * 100; // 반올림
// totalPrice = (totalPrice + 99) / 100 * 100; // 올림
//출력
System.out.println("이용 시간 : " + hour + "시간 " +minute+ "분" );
System.out.println("이용 요금 : " + totalPrice + "원" );
}
}
- 정답
시작 시각을 입력하세요
15 30
종료 시각을 입력하세요
18 45
이용 시간 : 3시간 15분
이용 요금 : 3100원
조건(Condistion)
각각의 경우 별로 처리하기 위해서는 조건 구문이 반드시 필요하며, if구문은 가장 강력한 조건 구문이다.
Q. 다음 요구사항에 맞게 프로그램을 구현하세요.
- 입력
여행 갈 예정인 달을 1 ~ 12 사이의 값으로 입력받는다
여행 갈 기간을 일단위로 입력받는다
- 처리
여행 갈 예정인 계절이 여름인지 아닌지 판정한다(여름은 6, 7, 8월로 한다)
하루당 경비는 여름일 때와 아닐 때가 다르게 계산된다
여름일 경우 하루에 8만원
여름이 아닐 경우 하루에 10만원
-출력
여름일 경우 "여름 특가 적용" 메세지와 함께 할인된 예상 경비를 출력한다.
여름이 아닐 경우 할인이 되지 않은 경비를 출력한다.
package condition;
import java.lang.*;
import java.util.Scanner;
public class test2_1 {
public static void main(String[] args) {
//입력
Scanner sc = new Scanner(System.in);
System.out.println("여행 시작 예정 월을 입력하세요");
int month = sc.nextInt();
System.out.println("여행을 기간을 일단위로 입력하세요");
int days = sc.nextInt();
sc.close();
int salePrice = 80000;
int originPrice = 100000;
//처리
boolean isSummer = month / 3 == 2;
//출력
if(isSummer) {
int total = days * salePrice;
System.out.println("여름 특가 할인이 적용됩니다!");
System.out.println("할인된 금액 : " + total+ "원");
}
else {
int total = days * originPrice;
System.out.println("예상 금액 : " + total +"원");
}
}
}
- 정답
여행 시작 예정 월을 입력하세요
8
여행을 기간을 일단위로 입력하세요
10
여름 특가 할인이 적용됩니다!
할인된 금액 : 800000원
논리 연산
논리와 논리 간의 연산을 말한다. 즉, 여러 판정 값들을 이용하여 최종 판정을 내리는 연산이라고 볼 수 있다.
&& - 논리 AND 연산 (=그리고)
|| - 논리 OR 연산 (=또는)
! - 논리 NOT 연산
Q. 복잡한 판정식
어떤 사람이 청소년인가 ?
청소년의 기준을 설정해야 함
중, 고등학생이라고 할 경우 나이가 14세 부터 19세 까지로 볼 수 있다.
청소년은 14세 이상 그리고(&&) 19세 이하에 해당한다.
package condition;
import java.lang.*;
public class test03 {
public static void main(String[] args) {
//입력
int age = 14;
//처리
boolean isTeen = 14 <= age && age <= 19;
//출력
System.out.println("청소년? " + isTeen);
}
}
- 정답
청소년? true
Q. 지하철 무임승차 대상인가?
65세 이상 어르신은 무임승차 대상
7세 이하 영유아는 무임승차 대상
7세 이하이면서 65세 이상일 수 있는가?
7세 이하 또는(||) 65세 이상
package condition;
import java.lang.*;
public class test04 {
public static void main(String[] args) {
//입력
int age = 100;
//처리
boolean isFree = 7 >= age || age >= 65 ;
System.out.println("무임승차? " + isFree);
}
}
- 정답
무임승차? true