【头歌】【educoder】【java】令人头疼的文献

本文介绍了一个关于日期格式转换的问题,需要处理多种不统一的日期格式,并将其转换为标准的 yyyy-MM-dd 格式。通过算法筛选出所有可能的有效日期组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

        公元 2245 年,一位年轻的考古学家小昆,意外的发现了一处藏于地下的文献档案室。档案室里收录了从 196011 日至 20591231 日的历史文献,这让小昆欣喜若狂。可当小昆准备整理这些文献时,他遇到了麻烦。这些历史文献中出现了很多日期,可是这些日期采用的格式非常不统一,有采用 年/月/日 的,有采用 月/日/年 的,还有采用 日/月/年 的。更加麻烦的是,年份也都省略了前两位,使得文献上的一个日期,存在很多可能的日期与其对应。

        比如 02/03/04,可能是 20020304 日、20040203 日或 20040302 日。
给出一个文献上的日期,你能帮助小昆判断有哪些可能的日期对其对应吗?

输入输出格式

输入格式

        输入一个日期,格式是"AA/BB/CC"。

输出格式

        输出若干个不相同的日期,每个日期一行,格式是"yyyy-MM-dd"。多个日期按从早到晚排列。

输入输出样例1

输入

02/03/04

输出

2002-03-04

2004-02-03

2004-03-02

输入输出样例2

输入

11/09/05

输出

2005-09-11

2005-11-09

2011-09-05

说明提示

0≤A,B,C≤9【Java代码及解题思路】

【Java代码及解题思路】

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    static int[] daysOfMonth = {0,31,28,31,30,31,30,31,31,30,31,30,31};
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String n = scanner.nextLine();
        // 分割“/”
        String[] str = n.split("/");

        // 数组年
        String[] years = new String[str.length];
        // 数组月
        String[] months = new String[str.length];
        // 数组日
        String[] days = new String[str.length];

        //创建数组留着字符串排序用,容量大一些
        String[] date = new String[9];
        //数组索引
        int index = 0;

        // years中存放 第一,第三个
        years[0] = str[0];
        years[1] = str[2];
        // months中存放 第一,第二个
        months[0] = str[0];
        months[1] = str[1];
        // days中可以全放
        days = str;

        // 遍历三数组任何可能结果
        for(String year:years){
            for(String month:months){
                for (String day:days){
                    //年月日三者都不相同且都不为空
                    if(year!=month&&month!=day&&day!=year&&year!=null&&month!=null&&day!=null){
                        //判断闰年
                        if(runYear(year)){ // 是闰年
                            //判断2月
                            if(Integer.parseInt(month)==2&&Integer.parseInt(day)<=29){
                                //存入待排序的字符串数组
                                date[index] = realYear(year)+"-"+month+"-"+day;
                                //索引++
                                index++;
                            }else { //不是2月
                                //判断符合月数和日数
                                if(isMonth(month)&&isDay(month,day)){
                                    date[index] = realYear(year)+"-"+month+"-"+day;
                                    index++;
                                }
                            }
                        }else { // 不是闰年
                            //判断符合月数和日数
                            if(isMonth(month)&&isDay(month,day)){
                                date[index] = realYear(year)+"-"+month+"-"+day;
                                index++;
                            }
                        }
                    }
                }
            }
        }

        // 新建数组,将date数组中的null值去除
        String[] realDate = new String[index];
        System.arraycopy(date,0,realDate,0,realDate.length);

        //自带排序,不能有null
        Arrays.sort(realDate);

        //输出
        for(String s:realDate){
            if(s!=null){
                System.out.println(s);
            }
        }
    }

    // 判断是否为闰年
    public static boolean runYear(String year){
        int yy = 0;
        int y = Integer.parseInt(year);
        if(y<=59){
            yy = 2000+y;
        }else {
            yy = 1900+y;
        }
        if(yy%4==0){
            return true;
        }
        return false;
    }

    // 拼接年份前缀
    public static String realYear(String year){
        int yy = 0;
        int y = Integer.parseInt(year);
        if(y<=59){
            yy = 2000+y;
        }else {
            yy = 1900+y;
        }
        return String.valueOf(yy);
    }

    // 判断是否为月
    public static boolean isMonth(String month){
        int m = Integer.parseInt(month);
        if(m>=1&&m<=12){
            return true;
        }
        return false;
    }

    // 判断是否为日
    public static boolean isDay(String month,String day){
        int m = Integer.parseInt(month);
        int d = Integer.parseInt(day);
        if(isMonth(month)&&d>=1&&d<=daysOfMonth[m]){
            return true;
        }
        return false;
    }
}

### 回答1: 头歌educoderjava面向对象是指在Java编程中,采用面向对象的编程思想,将程序中的数据和操作封装成对象,通过对象之间的交互来完成程序的功能。这种编程方式可以提高代码的可读性、可维护性和可扩展性,使程序更加灵活和高效。 ### 回答2: Educoder Java课程中的头歌是关于面向对象编程的内容。面向对象编程是一种编程思想,通过将数据和操作数据的方法封装在一起,以对象的形式组织和管理代码,提高代码的可维护性和可扩展性。 在Java中,面向对象编程的核心是类和对象。类是一种自定义的数据类型,可以定义类的属性和方法来描述对象的特征和行为。而对象是类的一个实例化,具有类属性和方法的特征和行为。 在面向对象编程中,还有三个重要的概念:封装、继承和多态。封装是指将数据和方法封装在一起,对外部隐藏其实现细节,只提供接口给外部使用。继承是指子类继承父类的属性和方法,可以在子类中添加新的属性和方法或覆盖父类的方法。多态是指同一对象在不同情况下的不同表现形式,比如通过子类对象调用重写的父类方法。 Java还提供了接口、抽象类、枚举等特性来扩展面向对象编程的功能,并且有丰富的类库可以方便地操作常见的数据结构和算法。 在Educoder Java课程中,学习面向对象编程可以让我们更好地组织和管理代码,提高代码的可读性、可维护性和可扩展性,从而更好地完成编程任务。同时也可以为后续学习Java Web开发和Android移动应用开发打好基础。 ### 回答3: Educoder Java面向对象是一门面向对象的编程语言课程,学习者将通过此课程学习Java编程语言中的面向对象编程思想,并学习如何使用Java语言进行面向对象编程的实践操作。 在Java语言中,所有的数据和方法都是以类的形式组织的,因此,学生需要掌握类、对象、封装、继承和多态等面向对象编程的核心概念。 学生将学习到Java语言中的类和对象的定义方法,如何定义类的属性和方法,如何创建对象并调用对象的属性和方法。另外,学生还将了解Java语言中的访问控制修饰符,如何使用封装性来保护类的属性和方法,以及如何使用继承来重用代码。 在本课程中,学生还将学习Java中的多态、抽象类和接口等概念以及如何使用它们来设计高效的程序。 此外,本课程还涵盖了Java中的异常处理、文件IO等实际应用场景,帮助学生掌握Java语言的完整编程技能。 综上所述,Educoder Java面向对象课程将为学生提供一个全面而深入的Java编程语言的学习体验,让学生掌握Java语言的核心概念和技能,为学生的未来发展奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值