차량 5부제 만들기
조건 2018년 9월 1일 부터 끝번호차량 출입제한
월 1,6 화 2,7 수 3,8 목 4,9 금 5,0 공휴일 제외 및 장애인,유아동승,경차 등 제외
차량 5부제를 검사해주는 프로그램을 만들기에 앞서 랜덤으로 차량을 만들 클래스를 간단하게 설명한다
[VehicleDeductibleCar()] 에서 사용할 랜덤한 차량을 만들어주는 클래스이다
cars배열에 차량의 종류를 담아주고 except_car배열에 제외차량을 담아준다
number변수에 랜덤하게 각 차량의 번호를 넣어주는데 random클래스에 nextint함수를 이용하여
0~9999번까지 랜덤하게 번호를 부여해줄것이다.
이때에 랜덤하게 0~9999번이라면 0번차량 100번차량 등 1,2,3자리 수의 번호의 차량이 나올수도 있기 때문에
%04d(% - 명령의시작, 0 - 채워질 문자, 4 - 총 자리수, d - 십진정수)를 이용하여 0100, 0001 등...
4자리수가 나올 수 있게 해준다.
그리고 car에는 cars배열의 길이만큼 랜덤으로 돌려 차가 나올 수 있게 해주며
String.format을 이용해 문자열의 형식을 설정하여 인스턴스를 찍어낼때에 경차0017 , 중형차 9956... 식으로
나올수 있게 해준다.
[VehicleDeductible] 클래스는 차량 5부제 검사를 시행하는 클래스이다.
익명 클래스를 선언하여 ArrayList<LocalDate>holydays에 양력의 공휴일을 담아준다.
[pass_car()] 메서드는 차량을 만든 클래스인 VehicleDeductibleCar클래스에서 제외차량의 배열을 가져와
제외차량 배열의 사이즈만큼 반복문을 돌려 contains로 제외차량의 단어가 포함되어 있는지 판별해
들어있다면 true를 반환 없다면 false를 반환해주는 메서드이다.
[pass_week()] 메서드는 공휴일인지 판별하여 주는 메서드이다
for each문을 이용하여 holydays에 들어있는 휴일들을 하나씩 검사하여 오늘이 공휴일이라면 true를
아니라면 false를 반환하여 준다.
getDayOfMonth는 월의 몇번째 일인지 반환하여주고
getMonthValue는 월을 반환하여준다.
[notPassCarLastNum()] 메서드는 매개변수로 인스턴스로 찍어낸 차와 현재 시간을 받아서
차량의 끝번호가 출입 제한 요일에 해당하는지 검사해주는 메서드이다.
day_of_value에 현재 요일의 값을 담아준다 (getDayOfWeek.getValue()는 월요일부터 일요일까지를
1~7의 int값으로 반환해준다)
first_num에는 앞자리의 시행일을 담고 last_num에는 시행일의 뒷자리를 담는다
예) 월 1(앞자리),6(뒷자리)
공휴일을 제외하고 계산하기 때문에 반복문은 총5회 돌며 day_of_value요일의 값이 월~금 일때에
toString().endsWith를 이용하여 차량의 끝번호만을 검사하여
true를 반환한다면 5부제 해당 차량번호이며 false를 반환한다면 5부제 미해당 차량번호임을 판별해준다.
메인에서는 만들어둔 메서드들을 이용하여 5부제 해당차량인지 검사하여준다
첫번째로 검사하는 befor_except_time변수에 5부제 시행전일을 담아줘 isAfter메서드를 이용하여
현재시간 now_time이 2018년8월31일 이후 인지를 판별하여주고 pass_car와 pass_week메서드를 이용하여
공휴일인지 제외차량인지를 먼저 판별하여 하나라도 해당된다면 출입 가능함을 알려주고
전부 해당되지않는다면
notPassCarLastNum 메서드를 이용하여 5부제 해당차량인지 검사하여주며 이곳도 문제없다면
else에서 출입 가능임을 알려준다.
2021-08-16은 월요일 이며 차량 끝번호 1,6번이 해당된다.
'공부 > Java 복습' 카테고리의 다른 글
자바 학생 등급 출력하기 if문과 삼항연산자 이용 2가지 방법 (0) | 2021.08.25 |
---|---|
Java 정규 표현식을 이용한 올바른 이메일 형식 찾기와 중복 제거 (0) | 2021.08.19 |
Java 소수 구하기 (0) | 2021.08.14 |
Java 달력 만들기 (0) | 2021.08.13 |
Java 핸드폰 번호 검사 (0) | 2021.08.12 |