软件测试作业,用ChatGPT4来帮个小忙,小划水,勿喷勿喷,近期有相关作业的同学看到我的文章,建议修改一下,别撞车了,哈哈哈~
提出需求
个人输入需求: Java实现键盘输入日期 输出前一天,需要考虑润年和非润年,2月是否有29号,大月小月的区分等细节处理,不符合的有对应提示,不使用java包里的封装好的类
ChatGPT4分析出的语义:实现了输入日期输出前一天,并且考虑了闰年和非闰年、2月的天数、大月和小月等细节处理。如果输入的日期格式不正确,会有对应的提示。
代码实现
import java.util.Scanner; public class TheDayBefore { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个日期(格式:yyyy-MM-dd):"); String inputString = scanner.nextLine(); String[] inputArray = inputString.split("-"); int year, month, day; if (inputArray.length == 3) { try { year = Integer.parseInt(inputArray[0]); month = Integer.parseInt(inputArray[1]); day = Integer.parseInt(inputArray[2]); } catch (NumberFormatException e) { System.out.println("日期格式不正确!"); return; } if (month < 1 || month > 12) { System.out.println("月份不正确!"); return; } if (day < 1 || day > 31) { System.out.println("日期不正确!"); return; } if ((day == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) || (day >= 30 && month == 2) || (day == 29 && month == 2 && !isLeapYear(year)) || (year < 0)) { System.out.println("日期不正确!"); return; } int prevYear = year; int prevMonth = month; int prevDay = day - 1; if (prevDay == 0) { prevMonth--; if (prevMonth == 0) { prevYear--; prevMonth = 12; } if (prevMonth == 2) { if (isLeapYear(prevYear)) { prevDay = 29; } else { prevDay = 28; } } else { if (prevMonth == 4 || prevMonth == 6 || prevMonth == 9 || prevMonth == 11) { prevDay = 30; } else { prevDay = 31; } } } System.out.println("前一天是:" + prevYear + "-" + formatMonth(prevMonth) + "-" + formatDay(prevDay)); } else { System.out.println("日期格式不正确!"); } } private static boolean isLeapYear(int year) { return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0; } private static String formatMonth(int month) { if (month < 10) { return "0" + month; } else { return String.valueOf(month); } } private static String formatDay(int day) { if (day < 10) { return "0" + day; } else { return String.valueOf(day); } } }
需求分析
过于划水,不太行,还是得简单分析一下需求叭,哈哈哈~
- 首先将目标定义为java,从年开始划分,判断输入的年是否为闰年:为闰年则对于二月这个特殊月,闰年为29天,平年为28天。例如输入2023-02-28是正确的,因为2023年为平年。
- 输入的月份月大还是月小,若是月大则除去二月以外,月大有31天,月小有30天。例如输入2023-04-01,前一天month=month-1,day=31。
- 输入的月是否为三月,若是三月例如2023-03-01(平年)前一天month = month-1;润年类似。
- 输入的月份是否是1月,例如2023-01-01则前一天为2022-12-31
及year = year - 1,month = 12,day = 31。
单元测试
1.测试输入的月份月大还是月小。
2.判断输入的年是否为闰年和输入的月是否为三月。
3.输入的月份是否是1月。
等价类划分
M1={月份:4、6、9、11}
M2={月份:1、3、5、7、8、10、12}
M3={月份:2}
D1={日期:1}
D2={日期:2<=日期<=27}
D3={日期:28}
D4={日期:29}
D5={日期:30}
D6={日期:31}
Y1={年:是闰年}
Y2={年:不是闰年}
决策表