• ChatGPT4实现前一天


    软件测试作业,用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);
            }
        }
    
    }
    

    需求分析

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

    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={年:不是闰年}

    决策表

    1 2 3 4 5 6 7 8 9 10 11
    月份在 M2 M3 M3 M2 M1 M1 M3 M2 M1 M4 M4
    日期在 D1 D4 D3 D1 D1 D1 D1 D2-D6 D2-D5 D1 D1
    年份在 Y1 Y2 Y1 Y2
    year-1
    moth-1
    day-1
    year复位12
    moth复位12
    day复位31
    day复位30
    day复位28
    day复位29
  • 相关阅读:
    java17搭建springboot+JPA+postgreSQL示例项目
    深入了解Eureka:微服务架构中的服务发现与注册中心
    shiro篇---开启常见的注解
    session与JWT认证
    MobLink Android端快速集成文档
    TensorFlow简介及下载地址
    Tomcat
    给docker容器中的mysql做定时数据备份
    GBase 8s手动创建和初始化实例
    Metersphere实现UI自动化元素不可点击(部分遮挡)
  • 原文地址:https://www.cnblogs.com/MrDevil-k/p/17298848.html