ChatGPT 实现前一天

提出需求

个人输入需求: 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);}}}

需求分析

过于划水,不太行,还是得简单分析一下需求叭,哈哈哈~

  1. 首先将目标定义为java,从年开始划分,判断输入的年是否为闰年:为闰年则对于二月这个特殊月,闰年为29天,平年为28天。例如输入2023-02-28是正确的,因为2023年为平年。
  2. 输入的月份月大还是月小,若是月大则除去二月以外,月大有31天,月小有30天。例如输入2023-04-01,前一天month=month-1,day=31。
  3. 输入的月是否为三月,若是三月例如2023-03-01(平年)前一天month = month-1;润年类似。
  4. 输入的月份是否是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={年:不是闰年}

决策表

1234567891011
月份在M2M3M3M2M1M1M3M2M1M4M4
日期在D1D4D3D1D1D1D1D2-D6D2-D5D1D1
年份在Y1Y2Y1Y2
year-1
moth-1
day-1
year复位12
moth复位12
day复位31
day复位30
day复位28
day复位29


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部