隔两日问题


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

自己想分享里边的思路与大家分享,在里边用了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;
						}
				}
			}
		}
	}
}




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





2.1黑盒测试 2.1.1 实验目的   (1) 能熟练应用黑盒测试技术进行测试用例设计;   (2) 对测试用例进行优化设计; 2.1.2 实验设备   主流 PC 机一套,要求安装windows 操作系统和Office 工具。 2.1.3 实验内容 题目一:日期问题   用决策表测试法测试以下程序:该程序有三个输入变量month、day、year(month 、 day 和year均为整数值,并且满足:1800≤year≤2020,1≤month≤12 和1≤day≤31),分别作为输入日期的月份、日、年份,通过程序可以输出该输入日期在日历上前一天的日期。例如,输入为 2004 年11 月29 日,则该程序的输出为2004 年11 月28 日。   (1) 分析各种输入情况,列出为输入变量 month、day、year 划分的有效等价类。   (2) 分析程序的规格说明,并结合以上等价类划分的情况,给出问题规定的可能采取的操作(即列出所有的动作桩)。   (3) 根据 (1) 和 (2) ,画出简化后的决策表。 划分等价类(此处只考虑了有效等价类),基本思想是根据三个输入项的取值来划分,首先三个输条件都是整数,然后确定边界值,month[1,12],day[1,31],year[1800,2020],再来划分等价类,条件依据是:闰年的2月是29天,非闰年的2月时28天,{1,3,5,7,8,10,12}月份是31天,{2,4,6,9,11}月份是30天 等价类 Year Month Day 有效等价类 Y1:[1800,2020]且为闰年 M1:2 D1:27 Y2:[1800,2020]不为闰年 M2:1,3,5,7,8, 10, D2:28 M3:2,4,6,9,11 D3 :29 M4:12 D4 :30 D4 :31 所有动作桩(弱组合形式) 测试用例ID 测试用例的等价类构成 001 Y1 M1 D1 002 Y2 M2 D2 003 Y1 M3 D3 004 Y2 M4 D4 005 Y1 M1 D5 强组合形式有2*3*5=30种。 决策表 Year Y1,Y2 Y1,Y2 Y1,Y2 Y1,Y2 Y1,Y2 Y1,Y2 Y1 Y2 Y1 Y2 Y1,Y2 Y1,Y2 Month M1,M4 M1 M2 M2 M2 M3 M3 M3 M3 M3 M3 M4 Day D1-D4 D5 D1-D3 D4 D5 D1 D2 D2 D3 D3 D4,D5 D5 Day+1 ▲ ▲ ▲ ▲ Day=1 ▲ ▲ ▲ ▲ ▲ Month+1 ▲ ▲ ▲ ▲ Month=1 ▲ Year+1 ▲ Year not exist ▲ ▲
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值