Tang David 2022-09-14 14:44 采纳率: 57.1%
浏览 88
已结题

关于#java#的问题,如何解决?

一.源代码:题目是求当前日期(年月日)的下一天(年月日),源代码已编好。

```java
package javaexperiment1;

//导包
import java.util.Scanner;

public class NextDate {

public static void main(String[] args) {
    int year,month,day;
        //创建对象
        Scanner sc = new Scanner(System.in);
        //分别输入年月日
        System.out.println("请输入年月日");
        //接收数据
        /*先定年月日输入值的界限*/
        boolean error;
        do{
            System.out.println("请输入年份(1~5000):");
            year = sc.nextInt();
            error = year<1 || year>5000;
        }while(error);//若error为true则重新输入年份

            do{
                System.out.println("请输入月份(1~12):");
                month = sc.nextInt();
                error = month<1 || month>12;
            }while (error);

            /*判断月份,特殊为2月*/
        int num;
        switch (month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12: num = 31; break;
            case 2:  num = (year%4==0&&year%100!=0 || year%400==0)? 29:28; break;
            default: num = 30;
        }

        do{
            System.out.println("请输入日(1~"+ num +"):");
            day = sc.nextInt();
            error = day<1 || day>num;
        }while (error);

        /*当输入的年月日都合法之后*/
        /*特殊为年末和月末*/
        System.out.println("请输入当前日期:"+ year +"-"+ month +"-"+ day);


        if (month == 12 && day==num){
            year++;
            month = 1;
            day = 1;
        }
        else if (day==num && month!=12){
            month++;
            day = 1;
        }
        else if (day!=num && month!=12){
            day++;
        }

        System.out.println("下一天日期:"+ year +"-"+ month +"-"+ day);








    }
}


img

二.题目要求如下(修改已编好的“求下一天年月日的程序”):
实验内容 :

(1)把实验一的项目文件夹JavaExperiment1复制一份,把新复制的文件夹修改为JavaExperiment3,在IDEA中打开项目文件夹JavaExperiment3,鼠标右键单击项目名称,在弹出的菜单中选择“重构”->"重命名",把项目名称修改为JavaExperiment3,在JavaExperiment3项目中完成本次实验。

(2) 通过IDEA的重构功能把项目的顶层包重命名为javaexperiment3,把NextDate类重命名为MyDate类。

(3) 把原来main方法中完成的功能分解到MyDate类的属性和普通方法中:把变量year、month和day定义成私有的成员变量并定义每个属性的getter方法,定义获取日期的getDate方法,把判断是否是闰年的功能提取到isLeapYear方法中,把获取一个月包含的天数的功能提取到getLengthOfMonth方法中,把输入年月日并对输入的数据进行校验的功能提取到inputData方法中,把计算输入日期的下一个日期的方法提取到nextDate方法中,重构后的MyDate类的UML类图如下图所示:

(4)在MyDate类中添加getDayOfYear方法,该方法判断输入的日期是一年中的第几天并返回判断结果。重构的MyDate类的UML类图如下图所示:

(5)在项目包中创建名为Test的测试类,在Test类的main方法中创建MyDate类的对象,通过创建的对象分别调用inputData、nextDate、getDayOfYear、getDate方法完成测试并输出结果。

img

  • 写回答

4条回答 默认 最新

  • 不加班996而已 2022-09-14 15:41
    关注
    import java.util.Scanner;
    
    public class MyDate {
        private int year;
        private int month;
        private int day;
    
        public int getYear() {
            return year;
        }
    
        public void setYear(int year) {
            this.year = year;
        }
    
        public int getMonth() {
            return month;
        }
    
        public void setMonth(int month) {
            this.month = month;
        }
    
        public int getDay() {
            return day;
        }
    
        public void setDay(int day) {
            this.day = day;
        }
    
        public boolean isLeapYear() {
            return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
        }
    
        public void nextDate() {
            int num = getLengthOfMonth(month);
            if (month == 12 && day == num) {
                year++;
                month = 1;
                day = 1;
            } else if (day == num && month != 12) {
                month++;
                day = 1;
            } else if (day != num && month != 12) {
                day++;
            }
        }
    
        public int getLengthOfMonth(int month) {
            /*判断月份,特殊为2月*/
            int num;
            switch (month) {
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    num = 31;
                    break;
                case 2:
                    num = (isLeapYear()) ? 29 : 28;
                    break;
                default:
                    num = 30;
            }
            return num;
        }
    
        public void inputData() {
            //创建对象
            Scanner sc = new Scanner(System.in);
            //分别输入年月日
            System.out.println("请输入年月日");
            boolean error;
            do {
                System.out.println("请输入年份(1~5000):");
                year = sc.nextInt();
                error = year < 1 || year > 5000;
            } while (error);//若error为true则重新输入年份
    
            do {
                System.out.println("请输入月份(1~12):");
                month = sc.nextInt();
                error = month < 1 || month > 12;
            } while (error);
            int num = getLengthOfMonth(month);
    
            do {
                System.out.println("请输入日(1~" + num + "):");
                day = sc.nextInt();
                error = day < 1 || day > num;
            } while (error);
    
            /*当输入的年月日都合法之后*/
            /*特殊为年末和月末*/
            System.out.println("请输入当前日期:" + year + "-" + month + "-" + day);
        }
    
        public String getDate() {
            return year + "-" + month + "-" + day;
        }
    
        public int getDayOfYear() {
            int sum = 0;
            for (int i = 0; i < 12; i++) {
                sum += getLengthOfMonth(i + 1);
            }
            return sum;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 已采纳回答 9月14日
  • 创建了问题 9月14日

悬赏问题

  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器
  • ¥15 如何使用SC92F8003固件库解析私有协议数据?
  • ¥15 如何在音频中嵌入字符串(水印)信息进行传递
  • ¥30 plc怎么以设计说明书申请软著
  • ¥15 硬盘识别不了,需要初始化,可我的数据怎么办
  • ¥15 lvm2被mask了,怎么unmask都没用(标签-ubuntu|关键词-apt)