WUSTOJ 1241: 到底是几月几日?(Java)
1241: 到底是几月几日?
题目
输入年月日,输出当前日期是当年的第几天,输入年份和第几天,输出当前日期。更多内容点击标题。
说明
算是水题吧,仅提供代码做参考,不做分析。代码没用JDK自带的类,想用自带类(例如:Date类)的就绕道。学学基础的可以看看。代码略长(温馨提醒)。
代码
/**
* time 268ms
* @author PengHao
* @version A1.1
* @date 2019-04-29 下午12:11:07
*/
import java.io.BufferedInputStream;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(new BufferedInputStream(System.in));
int k = 0; // 选择输入方式
int year, month, day; // 年月日
year = month = day = 0;
int daysOfYear = 0; // 这一年的第多少天
Date d = null; // 日期
while (sc.hasNext()) {
k = sc.nextInt();
if (1 == k) {
year = sc.nextInt();
month = sc.nextInt();
day = sc.nextInt();
d = new Date(year, month, day); // 实例
System.out.println(d.getDaysOfYear());
} else if (2 == k) {
year = sc.nextInt();
daysOfYear = sc.nextInt();
d = new Date(year, daysOfYear); // 实例
System.out.println(d.getDate());
}
}
sc.close();
}
}
/**
* @author PengHao
* @version 1.1
* @date 2019年4月29日 下午12:34:20
*/
class Date {
/**
* @Field <code>year</code> 年
*/
private int year = 1900;
/**
* @Field <code>month</code> 月
*/
private int month = 1;
/**
* @Field <code>day</code> 日
*/
private int day = 1;
/**
* @Field <code>daysOfYear</code> 当前日期是这一年的第多少天
*/
private int daysOfYear = 1;
/**
* @param year 年
* @param month 月
* @param day 日
*/
public Date(int year, int month, int day) {
this.year = year;
this.month = month;
this.day = day;
}
/**
* @param year 年
* @param daysOfYear 当年的第几天
*/
public Date(int year, int daysOfYear) {
this.year = year;
this.daysOfYear = daysOfYear;
}
/**
* @return the <code>daysOfYear</code>
* @see #daysOfYear
*/
public int getDaysOfYear() {
daysOfYear();
return daysOfYear;
}
/**
* @return 日期
* @see #toFormatString()
*/
public String getDate() {
parse();
return toFormatString();
}
/**
* Calculate <code>daysOfYear</code>
*
* @see #daysOfYear
*/
private void daysOfYear() {
int days = day; // 当月的天数
// 月份天数表
int[] daysOfMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 闰年加1天
if (0 == year % 4 && 0 != year % 100 || 0 == year % 400) {
daysOfMonth[1]++;
}
// 前面month-1个月的天数
for (int i = 0; i < month - 1; i++) {
days += daysOfMonth[i];
}
this.daysOfYear = days;
}
/**
* Calculate the date by the days
*/
private void parse() {
int month = 0;
int day = daysOfYear;
// 月份天数表
int[] daysOfMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
// 闰年二月加1天
if (0 == year % 4 && 0 != year % 100 || 0 == year % 400) {
daysOfMonth[1]++;
}
int i = 0;
while (i < 12 && day > daysOfMonth[i]) {
month++;
day -= daysOfMonth[i++];
}
this.month = month + 1;
this.day = day;
}
/**
* @return 格式为:"<code>yyyy/MM/dd</code>"的日期字符串
*/
private String toFormatString() {
StringBuilder sb = new StringBuilder();
sb.append(String.valueOf(this.year)); // 年
sb.append("/");
if (this.month < 10) {
sb.append("0");
}
sb.append(this.month); // 月
sb.append("/");
if (this.day < 10) {
sb.append("0");
}
sb.append(this.day); // 日
return sb.toString();
}
}