题目:
- 类的成员变量与方法、构造方法 在程序中经常要对时间进行操作但是并没有时间类型的数据。那么我们可以自己实现一个时间类来满足程序中的需要。0个整型成员时hour分minute秒second为了保证数据的安全性这三个成员变量应声明为私有。
- 为MyTime类定义构造方法以方便创建对象时初始化成员变量。 再定义diaplay方法用于将时间信息打印出来。 为MyTime类添加以下方法 addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou) 分别对时、分、秒进行加减运算。
题目理解:
我自己的理解是,时间是24小时制的,就是平时看见的【小时:分钟:秒】这种格式,然后输入一个时间后,对时分秒进行不同时间的加减操作后的具体时间值,也是这种格式【小时:分钟:秒】
程序分析:
1.使用24小时制的时间来做,所以初始输入的时间肯定有要求 小时:不超过24,分钟和秒不超过60
2.当调用秒的方法的时候,如果加或者减的数大于了60,那么分就应该相应的做出加减操作,所以最后秒的位置为对60不断求余后的模
3.同理,在对分操作的时候,小时也要进行调整
4.当小时超过24或者小于0的时候,就要重新重0或者前一天开始了,
注意:
当秒、分过于大的时候,也就是超过了好几倍的60,比它大的单位所要+的数值是要改变的
代码实现:
package com.xiaowang;
/**
* @Author 小王
* @DATE: 2022/7/14
*/
/*
5.类的成员变量与方法、构造方法 在程序中经常要对时间进行操作但是并没有时间类型的数据。那么我们可以自己实现一个 时间类 来满足程序中的需要。
0个整型成员时hour分minute秒second为了保证数据的安全性这三个成员变量应声明为私有。
为MyTime类定义构造方法以方便创建对象时初始化成员变量。 再定义diaplay方法用于将时间信息打印出来。
为MyTime类添加以下方法 addSecond(int sec) addMinute(int min) addHour(int hou) subSecond(int sec) subMinute(int min) subHour(int hou)
分别对时、分、秒进行加减运算。*/
/*分析:
1.使用24小时制的时间来做,所以初始输入的时间肯定有要求 小时:不超过24,分钟和秒不超过60
2.当调用秒的方法的时候,如果加或者减的数大于了60,那么分就应该相应的做出加减操作,所以最后秒的位置为对60不断求余后的模
3.同理,在对分操作的时候,小时也要进行调整
4.当小时超过24或者小于0的时候,就要重新重0或者前一天开始了,
注意:
当秒、分过于大的时候,也就是超过了好几倍的60,比它大的单位所要+的数值是要改变的
*/
public class Test5 {
public static void main(String[] args) {
MyTime myTime = new MyTime(10, 10, 10);
//打印初始化时间
System.out.print("初始化时的");
myTime.diaplay();
System.out.print("改变后的");
//改变时间
/*myTime.addSecond(120);
myTime.addMinute(130);
myTime.addHour(12);*/
/*myTime.subSecond(140);
myTime.subMinute(70);*/
myTime.subHour(20);
myTime.diaplay();
}
}
class MyTime{
private int hour;
private int minute;
private int second;
//构造器初始化时间
public MyTime(int hour, int minute, int second) {
//实例化对象的时候要注意,时分秒只能在0-60之间
if (hour>=0 && hour<=12 && minute>=0 && minute<=60 && second>=0 && second<=60 ){
this.hour = hour;
this.minute = minute;
this.second = second;
}else {
System.out.println("时分秒只能在0-60之间~请重新输入~");
return;
}
}
//定义diaplay方法用于将时间信息打印出来,在里面进行判断
public void diaplay() {
while (second>=60 || minute>=60 || hour>=24 ||second<0 || minute<0 || hour<0){//这种情况下时间是会改变的
//向后+的情况
if (second>=60){
minute+=second/60;//当秒大于60的时候,分会增加,至于增加好多次就看秒的大小了,所以直接通过+秒对60的整除即可
second%=60;//最后的秒数肯定是不超过60的
}if (minute>=60) {
hour+=minute/60;//当秒大于60的时候,分钟+1,至于增加好多次就看秒的大小了,所以直接通过+秒对60的整除即可
minute %= 60;//最后的秒数肯定是不超过60的
}if (hour>=24){
hour%=24;
}
//向前推的情况
if (second<0){
minute-=Math.abs(second/60);//当秒小于0的时候,秒-1,因为秒是负的,要是不取绝对值,减一个负的等于加一个正的,就有问题了~
second=Math.abs(second%60);//最后的秒数肯定是不超过60的,并且肯定是正数
}if (minute<0) {
hour-=Math.abs(minute/60);//当秒小于0的时候,分钟-1
minute =Math.abs(minute%60) ;//最后的秒数肯定是不超过60的,并且肯定是正数
}if (hour<0){
hour =24-Math.abs(hour%24);//因为是24小时制的,所以要用24去减去减去的绝对值
}
}
System.out.println("时间为="+getHour()+":"+getMinute()+":"+getSecond());
}
//addSecond(int sec)
public int addSecond(int sec){
setSecond(second+sec);//时间改变后要保存哇
return second+sec;
}
// addMinute(int min)
public int addMinute(int min){
setMinute(minute+min);
return minute+min;
}
// c
public int addHour(int hou){
setHour(hour+hou);
return hour+hou;
}
// subSecond(int sec)
public int subSecond(int sec){
setSecond(second-sec);
return second-sec;
}
// subMinute(int min)
public int subMinute(int min){
setMinute(minute-min);
return minute-min;
}
// subHour(int hou)
public int subHour(int hou){
setHour(hour-hou);
return hour-hou;
}
//get/set方法
public int getHour() {
return hour;
}
public void setHour(int hour) {
this.hour = hour;
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute = minute;
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
this.second = second;
}
}
输出: