【JAVA每日小练】实现时间的时、分、秒的加减,用来更正时间

问题描述

自己定义一个时间类,类名为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;
			}
		}
	}

}

结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值