解题思路:
从用户输入中读取日期字符串,将其解析为自定义的 MyDate 对象,然后将这些日期进行排序并输出
注意事项: 使用 while 循环读取输入的日期字符串时:
* 将输入的字符串按“/”分割成三个部分,并将其转换为整数以构造 MyDate 对象。
* 检查当前数组是否已满,如果满了则使用 Arrays.copyOf 方法扩容数组。
* 将新创建的 MyDate 对象添加到数组中,并增加计数器 i 。
* 要在自定义类中实现Comparable接口,同时重写compareTo()方法
参考代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
MyDate[] myDates = new MyDate[2];
int i = 0;
while (scanner.hasNext()){
String next = scanner.next();
String[] split = next.split("/");
//分割成三个字符串再转成对应的int类型进行构造
MyDate myDate = new MyDate(Integer.parseInt(split[2]), Integer.parseInt(split[0]), Integer.parseInt(split[1]));
//判断数组大小是否溢出
if (i >= myDates.length) {
//数组扩容 —— 建议一个大小一个大小扩容,不然数组中如果有空闲空间进行排序的话回报空指针异常
MyDate[] newMyDate = Arrays.copyOf(myDates, i + 1);
myDates = newMyDate; //再将myDates指向新的空间
}
myDates[i++] = myDate;
}
//排序
Arrays.sort(myDates);
//遍历 —— 这个i的大小就是当前数组的真实长度
for (int j = 0; j < i; j++) {
System.out.println(myDates[j]);
}
}
}
//单独定义一个日期类,用于日期的比较
class MyDate implements Comparable<MyDate>{
private int year;
private int month;
private int day;
public MyDate() {
}
public MyDate(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
@Override
public int compareTo(MyDate o) {
if (this == null || o == null) return 0;
if (this.year - o.year != 0) return year - o.year;
//说明两者的年份相同
else {
if (this.month - o.month != 0) return month - o.month;
//说明两者年份和月份都相同
else {
return day - o.day;
}
}
}
@Override
public String toString() {
String newDay = day + "";String newMonth = month +"";
if (day < 10) {
newDay = "0"+day ;
}
if (month < 10) {
newMonth = "0" + month;
}
return newMonth + "/" + newDay + "/" + year;
}
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复