问题描述
自己定义一个时间类,类名为MyTime,有三个整型成员,时hour,分minute,秒second,为了保证数据的安全性,这三个成员变量应声明为私有,提供对外公共函数,并验证有效性。再定义display方法,用于将时间信息打印出来。为类添加以下方法: addSecond (int sec), addMinute(int min),addHour(int hou),subSecond(int sec), subMinute(int min),subHour(int hou)分别对时、分、秒进行加减运算,用来更正时间。
分析
注意到我们每天的时间是怎么变化的,不难发现时值只有0到23这些值,而分值和秒值只有0到59,这就是第一个关键的问题解决突破口。而第二个突破口就是进位的问题了,在这里我们不用考虑昨天、今天、明天的问题,只是单纯地考虑时间问题。比如说现在是23:59:59,那么如果一秒钟后,时间会变为0:0:0。而当时间为0:0:0时,如果时间倒退到一秒钟之前,时间则会变为23:59:59。这里就是时间进制的问题了:
- 23时增加1时会进为0时;
- 59分增加1分会进为0分,同时向时位进1;
- 59秒增加1秒会进为0秒,同时向秒位进1;
- 0时减少1时会退为23时;
- 0分减少1分会退为59分,同时时位退1;
- 0秒减少1秒会退为59秒,同时分位退1;
这两个问题想通了,问题就迎刃而解了,这里我用了递归的方法实现时、分、秒的进退位变化。
具体内容如下:
//主类
import java.util.Scanner;
public class MyTime {
private int hour;
private int minute;
private int second;
void setTime()
{
Scanner input=new Scanner(System.in);
System.out.println("请设置初始时间:");
System.out.print("请设置时值:");
hour=input.nextInt();
if(hour<0||hour>23)System.out.println("您输入的时值无效!");
System.out.print("请设置分值:");
minute=input.nextInt();
if(minute<0||minute>59)System.out.println("您输入的分值无效!");
System.out.print("请设置秒值:");
second=input.nextInt();
if(second<0||second>59)System.out.println("您输入的秒值无效!");
}
void addHour(int hou)
{
if(hour+hou>23)
hour=hour+hou-24;
else
hour+=hou;
}
void addMinute(int min)
{
if(minute+min>59)
{
minute=minute+min-60;
addHour(1);
}
else
minute+=min;
}
void addSecond(int sec)
{
if(second+sec>59)
{
second=second+sec-60;
addMinute(1);
}
else
second+=sec;
}
void subHour(int hou)
{
if(hour-hou<0)
{
hour=24+(hour-hou);
}
else
hour-=hou;
}
void subMinute(int min)
{
if(minute-min<0)
{
minute=60+(minute-min);
subHour(1);;
}
else
minute-=min;
}
void subSecond(int sec)
{
if(second-sec<0)
{
second=60+(second-sec);
subMinute(1);
}
else
second-=sec;
}
void display()
{
System.out.println("当前时间为:"+hour+":"+minute+":"+second);
}
}
//主函数
import java.util.Scanner;
public class MyTimeText {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input=new Scanner(System.in);
MyTime t=new MyTime();
int choice=0;
while(choice!=9)
{
System.out.println("1.初始化时间");
System.out.println("2.增加时值");
System.out.println("3.增加分值");
System.out.println("4.增加秒值");
System.out.println("5.减少时值");
System.out.println("6.减少分值");
System.out.println("7.减少秒值");
System.out.println("8.查看时间");
System.out.println("9.退出");
System.out.print("请输入选择:");
choice=input.nextInt();
switch(choice)
{
case 1:
{
t.setTime();
t.display();
break;
}
case 2:
{
int hou;
System.out.print("请输入增加的时值:");
hou=input.nextInt();
t.addHour(hou);
t.display();
break;
}
case 3:
{
int min;
System.out.print("请输入增加的分值:");
min=input.nextInt();
t.addMinute(min);
t.display();
break;
}
case 4:
{
int sec;
System.out.print("请输入增加的秒值:");
sec=input.nextInt();
t.addSecond(sec);
t.display();
break;
}
case 5:
{
int hou;
System.out.print("请输入减少的时值:");
hou=input.nextInt();
t.subHour(hou);
t.display();
break;
}
case 6:
{
int min;
System.out.print("请输入减少的分值:");
min=input.nextInt();
t.subMinute(min);
t.display();
break;
}
case 7:
{
int sec;
System.out.print("请输入减少的秒值:");
sec=input.nextInt();
t.subSecond(sec);
t.display();
break;
}
case 8:t.display();break;
case 9:System.out.print("已退出!");break;
}
}
}
}
结果