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

ChatGPT4实现前一天的更多相关文章

  1. PHP 取前一天或后一天、一个月时间

    //获得当前时间     //date()格式化时间返回String类型.     date("Y-m-d H:i:s") $current_date = date(’Y-m-d’ ...

  2. 【python】datetime获取日期,前一天日期

    1.获取字符串型当前日期 2016-10-09格式 import datetime today = datetime.date.today() #datetime.date类型当前日期 str_tod ...

  3. MySql取得日期(前一天、某一天)

    在测试一个统计表格,发现每次手写一个地址实在很烦,干脆就搞个自动计算好时间区间的东西.以下内容作为收获吧! 取得当天: SELECT curdate(); mysql> SELECT curda ...

  4. 如何利用java得到当前的时间和前一天的时间

    1.得到当前的时间 Calendar   cal   =   Calendar.getInstance(); String time=formatter.format(cal.getTime()); ...

  5. [python实用代码片段]python获取当前时间的前一天,前一周,前一个月

    python获取当前时间的前一天,前一周,前一个月. 实用python的datetime.timedelta方法,避免了有的月份是30和31等不同的情况. 获取前一个月的时间,方法实现:首先datet ...

  6. [MySQL] 按日期进行统计(前一天、本周、某一天)

    在mysql数据库中,常常会遇到统计当天的内容.例如,在user表中,日期字段为:log_time统计当天 sql语句为: select * from user where date(log_time ...

  7. Extjs4 获取到前一天的日期

    Extjs4 获取到前一天的日期 Extjs官方示例 Ext.Date add( date, interval, value ) : Date Provides a convenient method ...

  8. 定时每天执行前一天的数据导入oracle

    #!/bin/bash export LANG="en_US.UTF-8" #设定时间变量,为前一天时间 log_date=`date +%Y-%m-%d -d "-1 ...

  9. mysql根据时间查询前一天数据

    MySql数据库如何根据时间查询前一天的数据?本文整理了几个解决方法,有需要的朋友参考下.   本节内容:用MySql怎么根据时间查询前一天的数据. 例1: 代码示例: select * from t ...

  10. DateTime.IsLeapYear 方法判断是否是闰年,DaysInMonth判断一个月有几天,Addday取得前一天的日期GetYesterDay

    一:DateTime.IsLeapYear 方法判断是否是闰年 二:代码 using System; using System.Collections.Generic; using System.Co ...

随机推荐

  1. vue 同一个子组件,两次赋值不同,dom不更新

    转自:https://blog.csdn.net/WO_JIAMIFENG/article/details/115250918 <div :key="inputkey"> ...

  2. 新安装的eclipse没有新建java project----解决方法:安装插件

    问题描述:最近新安装的一个eclipse版本,建立新工程的时候发现没有java project选项,如下: 百度了一些资料:https://blog.csdn.net/sinat_41752599/a ...

  3. ios底部安全距离

    一.使用背景 苹果官方推荐:使用env(),constant()来适配,env()和constant(),是IOS11新增特性,用于设定安全区域与边界的距离 safe-area-inset-left: ...

  4. Java经典知识复习

    1.自增变量 int i = 1; i = i++; int j = i++; int k = i + ++i * i++; 问i.j.k分别等于? 针对这类题目,   1. 赋值操作=,最后计算: ...

  5. 3D max安装

    ​  一.安装包获取 下载前关闭电脑保护,病毒查杀等功能,因为注册机会被认为是病毒处理!!! 3dmax2018(64位)下载链接:https://pan.baidu.com/s/1dDsRW9XQa ...

  6. 全面加速 GitHub,git clone 太慢的 9 种解决办法

    https://cloud.tencent.com/developer/article/1835785

  7. (二).JavaScript的运算符和表达式,数据类型转化

    4. 运算符和表达式 4.3 赋值运算符和表达式 1.赋值运算符 = 作用:赋值运算符就是将右边的内容赋值给左边的变量或属性. var result = 1 + 2; 2.复合赋值运算符 +=,-=, ...

  8. 中兴radius属性列表new.xls

    标准属性 自定义属性

  9. CH573 CH582 OTA例程讲解(使用固定库+扩大APP空间)

    例程中提供的两种OTA就不过多介绍了,在BLE目录下有一个PDF专门讲解:WCH蓝牙空中升级(BLE OTA) 方式一是带库升级,整个codeflash分成四个区域,Jump IAP,APP,OTA, ...

  10. 《Unix/Linux系统编程》第十二周学习笔记

    <Unix/Linux系统编程>第十二周学习笔记 MySQL数据库简介 MySQL是一个关系型数据库管理系统,是最流行的关系型数据库管理系统之一.在 WEB 应用方面,MySQL 是最好的 ...