经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » 人工智能基础 » 查看文章
ChatGPT4实现前一天
来源:cnblogs  作者:MrDevil  时间:2023/4/10 8:47:44  对本文有异议

软件测试作业,用ChatGPT4来帮个小忙,小划水,勿喷勿喷,近期有相关作业的同学看到我的文章,建议修改一下,别撞车了,哈哈哈~

提出需求

个人输入需求: Java实现键盘输入日期 输出前一天,需要考虑润年和非润年,2月是否有29号,大月小月的区分等细节处理,不符合的有对应提示,不使用java包里的封装好的类

ChatGPT4分析出的语义:实现了输入日期输出前一天,并且考虑了闰年和非闰年、2月的天数、大月和小月等细节处理。如果输入的日期格式不正确,会有对应的提示。

代码实现

  1. import java.util.Scanner;
  2. public class TheDayBefore {
  3. public static void main(String[] args) {
  4. Scanner scanner = new Scanner(System.in);
  5. System.out.print("请输入一个日期(格式:yyyy-MM-dd):");
  6. String inputString = scanner.nextLine();
  7. String[] inputArray = inputString.split("-");
  8. int year, month, day;
  9. if (inputArray.length == 3) {
  10. try {
  11. year = Integer.parseInt(inputArray[0]);
  12. month = Integer.parseInt(inputArray[1]);
  13. day = Integer.parseInt(inputArray[2]);
  14. } catch (NumberFormatException e) {
  15. System.out.println("日期格式不正确!");
  16. return;
  17. }
  18. if (month < 1 || month > 12) {
  19. System.out.println("月份不正确!");
  20. return;
  21. }
  22. if (day < 1 || day > 31) {
  23. System.out.println("日期不正确!");
  24. return;
  25. }
  26. if ((day == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) ||
  27. (day >= 30 && month == 2) ||
  28. (day == 29 && month == 2 && !isLeapYear(year)) ||
  29. (year < 0)) {
  30. System.out.println("日期不正确!");
  31. return;
  32. }
  33. int prevYear = year;
  34. int prevMonth = month;
  35. int prevDay = day - 1;
  36. if (prevDay == 0) {
  37. prevMonth--;
  38. if (prevMonth == 0) {
  39. prevYear--;
  40. prevMonth = 12;
  41. }
  42. if (prevMonth == 2) {
  43. if (isLeapYear(prevYear)) {
  44. prevDay = 29;
  45. } else {
  46. prevDay = 28;
  47. }
  48. } else {
  49. if (prevMonth == 4 || prevMonth == 6 || prevMonth == 9 || prevMonth == 11) {
  50. prevDay = 30;
  51. } else {
  52. prevDay = 31;
  53. }
  54. }
  55. }
  56. System.out.println("前一天是:" + prevYear + "-" + formatMonth(prevMonth) + "-" + formatDay(prevDay));
  57. } else {
  58. System.out.println("日期格式不正确!");
  59. }
  60. }
  61. private static boolean isLeapYear(int year) {
  62. return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
  63. }
  64. private static String formatMonth(int month) {
  65. if (month < 10) {
  66. return "0" + month;
  67. } else {
  68. return String.valueOf(month);
  69. }
  70. }
  71. private static String formatDay(int day) {
  72. if (day < 10) {
  73. return "0" + day;
  74. } else {
  75. return String.valueOf(day);
  76. }
  77. }
  78. }

需求分析

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

  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

原文链接:https://www.cnblogs.com/MrDevil-k/p/17298848.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号