軟體測試作業,用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={年:不是閏年}
決策表
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 | √ |