ChatGPT4實現前一天

2023-04-08 18:00:12

軟體測試作業,用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