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);
}
}
}
需求分析
过于划水,不太行,还是得简单分析一下需求叭,哈哈哈~
- 首先将目标定义为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 | √ |
ChatGPT4实现前一天的更多相关文章
- PHP 取前一天或后一天、一个月时间
//获得当前时间 //date()格式化时间返回String类型. date("Y-m-d H:i:s") $current_date = date(’Y-m-d’ ...
- 【python】datetime获取日期,前一天日期
1.获取字符串型当前日期 2016-10-09格式 import datetime today = datetime.date.today() #datetime.date类型当前日期 str_tod ...
- MySql取得日期(前一天、某一天)
在测试一个统计表格,发现每次手写一个地址实在很烦,干脆就搞个自动计算好时间区间的东西.以下内容作为收获吧! 取得当天: SELECT curdate(); mysql> SELECT curda ...
- 如何利用java得到当前的时间和前一天的时间
1.得到当前的时间 Calendar cal = Calendar.getInstance(); String time=formatter.format(cal.getTime()); ...
- [python实用代码片段]python获取当前时间的前一天,前一周,前一个月
python获取当前时间的前一天,前一周,前一个月. 实用python的datetime.timedelta方法,避免了有的月份是30和31等不同的情况. 获取前一个月的时间,方法实现:首先datet ...
- [MySQL] 按日期进行统计(前一天、本周、某一天)
在mysql数据库中,常常会遇到统计当天的内容.例如,在user表中,日期字段为:log_time统计当天 sql语句为: select * from user where date(log_time ...
- Extjs4 获取到前一天的日期
Extjs4 获取到前一天的日期 Extjs官方示例 Ext.Date add( date, interval, value ) : Date Provides a convenient method ...
- 定时每天执行前一天的数据导入oracle
#!/bin/bash export LANG="en_US.UTF-8" #设定时间变量,为前一天时间 log_date=`date +%Y-%m-%d -d "-1 ...
- mysql根据时间查询前一天数据
MySql数据库如何根据时间查询前一天的数据?本文整理了几个解决方法,有需要的朋友参考下. 本节内容:用MySql怎么根据时间查询前一天的数据. 例1: 代码示例: select * from t ...
- DateTime.IsLeapYear 方法判断是否是闰年,DaysInMonth判断一个月有几天,Addday取得前一天的日期GetYesterDay
一:DateTime.IsLeapYear 方法判断是否是闰年 二:代码 using System; using System.Collections.Generic; using System.Co ...
随机推荐
- Linux习题
1.判断/etc/inittab文件是否大于100行,如果大于,则显示"/etc/inittab is a big file."否者显示"/etc/inittab is ...
- 浙里办微信小程序总结
浙里办微信小程序单点登录流程 1.获取浙里办跳转地址中ticket或者微信小程序中的ticketId let ticket = getQueryString("ticket", w ...
- python+基本3D显示
想要将双目照片合成立体图实现三维重建,完全没有头绪.但是对三维理解是必须的.所以将以前在单片机上运行的 3D画图 程序移植到python上.效果如下: 没有用numpy.openGL等,只用了纯mat ...
- IT工具知识-09:OpenWrt设置旁路由
0.使用背景 设备:N1 固件:filppy打包的60+ 1.使用方法 1.1知道主路由的IP地址(例如192.168.1.1) 1.2在OpenWrt管理界面下进行设置 进入OpenWrt管理界面 ...
- Git_基础理论
三个区域 Git本地有三个工作区域:工作目录(Working Directory).暂存区(Stage/Index).资源库(Repository或Git Directory).如果在加上远程的git ...
- 点击事件触发count自增
1.vue3合成API :(即为什么要用setup() :为了数据更加关联) vue3 引入setup()合成API语法,它可以将某数据关联的内容整合到一个部分,即使setup里的内容越来越多也会围绕 ...
- Java使用Redis实现分布式锁
1.概述 此处使用Redis的setNx命令和expire命令和del命令来实现分布式锁. 首先我们要知道, 我们的redis执行命令是队列方式的,并不存在多个命令同时运行,所有命令都是串行的访问.那 ...
- gdb调试数组访问越界记录
综述 问题来源于力扣的一道域名访问统计题目,我本想以建立首字母索引的方式去统计,但是在申请子域名buffer的地方发现使用malloc(sizeof(char)4)申请出来的buffer每次+1只能增 ...
- 如何优化if--else
1.现状代码 public interface IPay { void pay(); } package com.test.zyj.note.service.impl; import com.test ...
- go 发布
rm test-serv.bingo build -o test-serv.bin main.go