隔两日问题


今天软件测试课程,老师讲解隔一日问题相关测试,然后要求我们写隔两日问题的代码,以及进行相关的测试,自己写了代码。

自己想分享里边的思路与大家分享,在里边用了switcg语句,以及if条件判断语句,进行相关的判断。隔两日问题就是,要求在程序中手动输入相关的日期,在实验中老师要求:该程序有三个输入变量month、day、year(month 、 day 和year均为整数值,并且满足:1≤month≤12,1≤day≤311900≤year≤2050),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上隔两天的日期。例如,输入为 2004 年11 月29 日,则该程序的输出为2004 年12 月1 日。

在程序中首先要考虑year是闰年还是平年。 判断方法就是,闰年就是世纪年可以被400整除,非世纪年可以被4整除的年份,世纪年就是像1900, 2000之类的这样的年份,闰年中首先得考虑2月有29天。非闰年2月有28天。 其次就是注意隔两天问题,像输入1999,12 ,30. 输出应该为2000 , 1, 1.这里就想说明在程序中要考虑年份以及月份的加减,还有日期的加减,我在这里是使用取余的方进行计算的,例如 输入1999,12 ,30 , 12月30号,day = (day + 2) % 31.这里除31就是因为12月有31天,几月有几天就需要除以相应的天数。month = (month + 1)%12.这里就是在每个月的最后两天,隔两日就回进入下一月。year发生变化只会在月份在十二月的时候,而且在十二月的最后两天。

这里我附上我自己写的代码,发现错误希望及时指出,本人也是菜鸟一枚。


package com.test02;
import java.util.*;
public class NextDay {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		int year,month,day;
		
		//输入年 月 日 并且进行判断。
		System.out.println("请输入年份:");
		year = sc.nextInt();
		
		System.out.println("请输入月份:");
		month = sc.nextInt();
		
		System.out.println("请输入几号:");
		day = sc.nextInt();
		
		if(year>2050 || year<1900 || month>12 || month<1 || day>31 || day<1){
			System.out.println("数据输入错误!!!");
		}else{
			if((year%4==0 && year%100!=0) || year%400==0){
				//闰年
				switch(month){
				case 1:
				case 3:
				case 5:
				case 7:
				case 8:
				case 10:
				case 12:
					if(day+2>31){
						if(month == 12 && day == 30 || day ==31)
							year+=1;
						month=(month+1)%12;
						day = (day+2)%31;
						System.out.println(year + " - " + month + " - " + day);
						break;
					}else{
						day = (day+2)%31;
						System.out.println(year + " - " + month + " - " + day);
						break;
					}
				case 4:
				case 6:
				case 9:
				case 11:
					if(day+2>30){
						month = month+1;
						day = (day+2)%30;
						System.out.println(year + " - " + month + " - " + day);
						break;
					}else{
						day = day+2;
						System.out.println(year + " - " + month + " - " + day);
						break;
					}
				case 2:
					if(day>29){
						System.out.println("数据输入错误!!!");
						break;
					}
					else{
						if(day+2>29){
							month = month+1;
							day = (day+2)%29;
							System.out.println(year + " - " + month + " - " + day);
							break;
						}else{
							day = (day+2)%29;
							System.out.println(year + " - " + month + " - " + day);
							break;
						}
					}
				}
			}else{
				//非闰年
				switch(month){
					case 1:
					case 3:
					case 5:
					case 7:
					case 8:
					case 10:
					case 12:
						if(day+2>31){
							if(month == 12 && day == 30 || day ==31)
								year+=1;
							month=(month+1)%12;
							day = (day+2)%31;
							System.out.println(year + " - " + month + " - " + day);
							break;
						}else{
							day = (day+2)%31;
							System.out.println(year + " - " + month + " - " + day);
							break;
						}
					case 2:
						if(day>28){
							System.out.println("数据输入错误!!!");
							break;
						}else if(day+2>28){
							month = month+1;
							day = (day+2)%28;
							System.out.println(year + " - " + month + " - " + day);
							break;
						}else{
							day = (day+2)%28;
							System.out.println(year + " - " + month + " - " + day);
							break;
						}
					case 4:
					case 6:
					case 9:
					case 11:
						if(day+2>30){
							month = month+1;
							day = (day+2)%30;
							System.out.println(year + " - " + month + " - " + day);
							break;
						}else{
							day = (day+2)%30;
							System.out.println(year + " - " + month + " - " + day);
							break;
						}
				}
			}
		}
	}
}




这里是我自己实验的截图,进行了闰年,平年,以及错误的实验截图。





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值