ChatGPT 实现前一天

news2024/9/23 15:25:18

提出需求

个人输入需求: 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={年:不是闰年}

决策表

1234567891011
月份在M2M3M3M2M1M1M3M2M1M4M4
日期在D1D4D3D1D1D1D1D2-D6D2-D5D1D1
年份在Y1Y2Y1Y2
year-1
moth-1
day-1
year复位12
moth复位12
day复位31
day复位30
day复位28
day复位29

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/811063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能安全-2-非平衡数据处理

0 提纲 现象与原因非平衡数据处理方法概览数据预处理层面特征层算法层面1 现象与原因 非平衡数据分类问题:在网络信息安全问题中,诸如恶意软件检测、SQL注入、不良信息检测等许多问题都可以归结为机器学习分类问题。这类机器学习应用问题中,普遍存在非平衡数据的现象。 产…

哈希函数如何工作 ?

动动发财的小手&#xff0c;点个赞吧&#xff01; 作为一名程序员&#xff0c;您每天都会使用哈希函数。它们在数据库中用于优化查询&#xff0c;在数据结构中用于使速度更快&#xff0c;在安全性中用于保证数据安全。几乎每次与技术的交互都会以某种方式涉及哈希函数。 哈希函…

生命在于学习——APP渗透学习笔记

一、app渗透篇 1、Android 简介 自从 Android 被谷歌收购&#xff08;2005 年&#xff09;&#xff0c;谷歌已经完成了整个开发&#xff0c;在过去的 9 年里&#xff0c;尤其是在安全方面&#xff0c;有很多变化。 现在&#xff0c;它是世界上最广泛使用的智能手机平台&#…

代码、低代码、无代码开发触手可及的低代码平台源码

基于moleculer微服务架构开发的低代码平台源码&#xff0c;代码、低代码、无代码开发触手可及。 一、低代码平台系统功能 【公司信息】 管理员可通过页面顶部设置菜单或者应用程序中设置应用进入到后台设置页面。 在公司信息页面可进行基础信息修改&#xff0c;启用用户自助…

我在CSDN创作的第五十天

这篇文章主要是写给自己的&#xff0c;是对自己现在阶段的一个认识&#xff0c;6月10号&#xff0c;我在CSDN发布了第一篇文章&#xff0c;距离现在不多不少&#xff0c;刚刚好是50天&#xff0c;期间创作的都是C语言的一些内容&#xff0c;我创作的文章也都是我现在所学的知识…

Django系列之DRF简单使用

基于ModelViewSets的简单使用 models.py from django.db import modelsclass AuthorDetail(models.Model):gender models.CharField(max_length8)birthday models.DateField()telephone models.BigIntegerField()addr models.CharField(max_length64)class Author(models…

手机的python怎么运行文件,python在手机上怎么运行

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;手机上的python怎么运行程序&#xff0c;手机的python怎么运行文件&#xff0c;今天让我们一起来看看吧&#xff01; 1、python程序怎么在手机上运行 python语言应用很广泛&#xff0c;自己也很喜欢使用它&#xff0c;其…

自学网络安全(黑客)入门

自学网络安全入门可以按照以下步骤进行&#xff1a; 确定学习目标&#xff1a;网络安全是一个广泛的领域&#xff0c;包括密码学、网络防御、漏洞利用等方面。确定自己想要学习的具体方向&#xff0c;可以更好地规划学习路线。 学习基础知识&#xff1a;网络安全的基础知识包括…

Leetcode周赛 | 2023-7-30--我真是个废物

2023-7-30--我真是个废物 题1体会我的代码 题2体会我的代码 题3体会我的代码 题1 体会 根本没想到用双指针。原因是&#xff0c;没想到还要用一个字典去维护子数组中各个数字的出现频次&#xff0c;以及出现频次不小于1 (也就是大于0) 的数字个数。 这里的双重循环也很巧妙&am…

牛客 排座椅(贪心)

上课的时候总有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的一件事情。不过&#xff0c;班主任小雪发现了一些有趣的现象&#xff0c;当同学们的座次确定下来之后&#xff0c;只有有限的D对同学上课时会交头接耳。 同学们在教室中坐成了 M 行 N 列&…

【每日一题Day281】LC142链表 Ⅱ| 快慢指针 哈希表

环形链表 Ⅱ【LC142】 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使…

用JavaScript和HTML实现聊天页面和功能(超详细)

文章目录 &#x1f680;一、介绍&#x1f680;二、开始编码&#x1f50e;2.1 创建一个HTML文件&#x1f50e;2.2 编写样式&#x1f50e;2.3 完善聊天页面&#x1f50e;2.4 编写按钮逻辑&#x1f50e;2.5 测试聊天效果&#x1f50e;2.6 优化对话显示&#x1f50e;2.7 设置一个自…

Cesium地形裁剪

基于纹理映射实现的裁剪&#xff0c;反裁剪也可以。比判断点是否在多边形内裁剪性能要好的多&#xff0c;缺点是在边缘锯齿感会比较明显。 3DTileset 的裁剪也和这样一样用纹理映射实现了&#xff0c;效果一样

单链表的多语言表达:C++、Java、Python、Go、Rust

单链表 是一种链式数据结构&#xff0c;由一个头节点和一些指向下一个节点的指针组成。每个节点包含一个数据元素和指向下一个节点的指针。头节点没有数据&#xff0c;只用于表示链表的开始位置。 单链表的主要操作包括&#xff1a; 添加元素&#xff1a;在链表的头部添加新…

【指针二:穿越编程边界的超能力】

本章重点 5. 函数指针 6. 函数指针数组 7. 指向函数指针数组的指针 8. 回调函数 9. 指针和数组面试题的解析 五、函数指针 首先看一段代码&#xff1a; 输出的是两个地址相同&#xff0c;这两个相同的地址都是 test 函数的地址。 那我们的函数的地址要想保存起来&#xff0c;怎…

LeetCode63. 不同路径 II

63. 不同路径 II 文章目录 [63. 不同路径 II](https://leetcode.cn/problems/unique-paths-ii/)一、题目二、题解方法一&#xff1a;二维数组动态规划方法二&#xff1a;一维数组动态规划 一、题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “…

【Linux】线程互斥 -- 互斥锁 | 死锁 | 线程安全

引入互斥初识锁互斥量mutex锁原理解析 可重入VS线程安全STL中的容器是否是线程安全的? 死锁 引入 我们写一个多线程同时访问一个全局变量的情况(抢票系统)&#xff0c;看看会出什么bug&#xff1a; // 共享资源&#xff0c; 火车票 int tickets 10000; //新线程执行方法 vo…

rtthread的idle线程不应该长时间堵塞

RT-Thread是一个实时嵌入式操作系统&#xff0c;它的空闲线程&#xff08;Idle Thread&#xff09;是在系统中没有其他任务需要执行时运行的线程。空闲线程通常用于执行一些低优先级的任务或者进行系统的休眠等操作。 RT-Thread的空闲线程不能在线程中堵塞的原因是为了确保系统…

将多张图片拼接成图像矩阵图

用Python实现将12张图片排列成n*m的图像矩阵图 目录 引言环境准备代码实现效果演示总结 引言 在图像处理和图像展示的应用中&#xff0c;将多张图片排列成一个图像矩阵图是一个常见的需求。本博客介绍如何使用Python实现将12张图片排列成n*m的图像矩阵图。 环境准备 为了实…

【动态规划刷题 2】不同路径不同路径 II

不同路径 62 . 不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的…