zoukankan      html  css  js  c++  java
  • 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();
    	}
    }
    
  • 相关阅读:
    正则表达式学习网站
    Longest Substring Without Repeating Characters
    保留小数点后几位数字
    ReentrantLock和synchronized的区别随笔
    范型 小编
    两个线程交替打印字符串
    Gray Code
    Ajax
    堆排序
    Clone Graph
  • 原文地址:https://www.cnblogs.com/wowpH/p/11060805.html
Copyright © 2011-2022 走看看