คลาสจำลองระบบเวลาแบบยูนิกซ์มิลลิวินาที
โจทย์
สร้างคลาสชื่อ Time เพื่อแสดงการคำนวณเวลา คลาสควรประกอบด้วยสิ่งต่อไปนี้:
- แอตทริบิวต์ (หรือฟิลด์ข้อมูล)
- แอตทริบิวต์ private ประเภท long ชื่อ “hour”, “minute”, และ “second” ที่แสดงเวลา
- คอนสตรักเตอร์
- คอนสตรักเตอร์แบบไม่มีอาร์กิวเมนต์ที่สร้างวัตถุ Time สำหรับเวลาปัจจุบัน (ค่าของฟิลด์ข้อมูลจะแสดงเวลาปัจจุบัน)
- คอนสตรักเตอร์ที่สร้างวัตถุ Time ด้วยเวลาที่ผ่านไปที่กำหนดนับตั้งแต่เที่ยงคืนของวันที่ 1 มกราคม 1970 เป็นมิลลิวินาที (ค่าของฟิลด์ข้อมูลจะแสดงเวลานี้)
- คอนสตรักเตอร์ที่สร้างวัตถุ Time ด้วยชั่วโมง, นาที, และวินาทีที่ระบุ
- เมธอด
- เมธอด getter สามตัวสำหรับฟิลด์ข้อมูล hour, minute, และ second ตามลำดับ
- เมธอดชื่อ setTime(long elapseTime) ที่ตั้งค่าเวลาใหม่ให้กับวัตถุโดยใช้เวลาที่ผ่านไป ตัวอย่างเช่น ถ้าเวลาที่ผ่านไปคือ 555550000 มิลลิวินาที ชั่วโมงคือ 10 นาทีคือ 19 และวินาทีคือ 10 เขียนคลาสไดรเวอร์ชื่อ TimeDriver ที่สร้างวัตถุ Time และแสดงชั่วโมง นาที และวินาทีในรูปแบบ ชั่วโมง:นาที:วินาที
| Input | Output |
|---|---|
| 555550000 | 10:19:10 |
โค้ด
import java.util.Scanner;
public class TimeDriver {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long elapsedTime = scanner.nextLong();
Time time = new Time(elapsedTime);
System.out.printf("%d:%d:%d", time.getHour(), time.getMinute(), time.getSecond());
}
}
class Time{
private long hour;
private long minute;
private long second;
public Time(){
hour = 0;
minute = 0;
second = 0;
}
public Time(long elapseTime) {
setTime(elapseTime);
}
public Time(long hour, long minute, long second){
this.hour = hour;
this.minute = minute;
this.second = second;
}
public long getHour() {
return hour;
}
public long getMinute() {
return minute;
}
public long getSecond() {
return second;
}
public void setTime(long elapseTime) {
long totalSeconds = elapseTime / 1000;
this.hour = (totalSeconds / 3600) % 24;
this.minute = (totalSeconds % 3600) / 60;
this.second = totalSeconds % 60;
}
}คำอธิบาย
1. คลาส TimeDriver
คลาส TimeDriver เป็นคลาสหลักที่ใช้ในการรันโปรแกรม มีส่วนประกอบดังนี้:
1.1 เมธอด main
- เมธอด
mainเป็นจุดเริ่มต้นของโปรแกรม - ใช้
Scannerเพื่อรับข้อมูลจากผู้ใช้ - รับค่าเวลาที่ผ่านไป (elapsed time) จากผู้ใช้
- สร้างวัตถุ
Timeโดยใช้เวลาที่ผ่านไปนั้น - แสดงผลเวลาในรูปแบบ ชั่วโมง:นาที:วินาที
2. คลาส Time
คลาส Time เป็นคลาสที่ใช้จัดการเกี่ยวกับเวลา มีส่วนประกอบดังนี้:
2.1 ตัวแปร
hour: เก็บค่าชั่วโมงminute: เก็บค่านาทีsecond: เก็บค่าวินาที
ทั้งหมดเป็นตัวแปรแบบ private ซึ่งหมายความว่าไม่สามารถเข้าถึงได้โดยตรงจากภายนอกคลาส
2.2 คอนสตรักเตอร์ (วิธีสร้างวัตถุ)
Time(): สร้างวัตถุ Time โดยกำหนดค่าเริ่มต้นเป็น 0:0:0Time(long elapseTime): สร้างวัตถุ Time โดยใช้เวลาที่ผ่านไปเป็นมิลลิวินาทีTime(long hour, long minute, long second): สร้างวัตถุ Time โดยระบุชั่วโมง นาที และวินาที
2.3 เมธอด getter
getHour(): ส่งคืนค่าชั่วโมงgetMinute(): ส่งคืนค่านาทีgetSecond(): ส่งคืนค่าวินาที
2.4 เมธอด setTime
เมธอด setTime(long elapseTime) ใช้สำหรับกำหนดเวลาใหม่ให้กับวัตถุ Time โดยใช้เวลาที่ผ่านไปเป็นมิลลิวินาที:
- แปลงมิลลิวินาทีเป็นวินาทีทั้งหมด
- คำนวณชั่วโมงโดยหารด้วย 3600 และเอาเศษจากการหารด้วย 24 (เพื่อให้ได้ค่าระหว่าง 0-23)
- คำนวณนาทีโดยใช้เศษจากการหารด้วย 3600 แล้วหารด้วย 60
- คำนวณวินาทีโดยใช้เศษจากการหารด้วย 60
ปรับปรุงล่าสุด