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();
}
}

WUSTOJ 1241: 到底是几月几日?(Java)的更多相关文章

  1. 2015年12月28日 Java基础系列(六)流

    2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流2015年12月28日 Java基础系列(六)流

  2. 2016年6月20日 JAVA知识框架

    基于 J2EE 列举的知识架构,大体列举开发基础知识.帮助我随时查缺补漏,奉行好记性不如烂笔头.写了这该随笔,以便后续查询. 1  JAVA简介 2  JAVA编程环境 3  JAVA基本编程结构 4 ...

  3. 2017年1月1日 java学习第二天复习

    今天是新年的第一天,以前学习没有总结习惯,学习效率和成果都很不好.  学习的过程就是反复的复习和不断学习的过程,开始今天的学习总结   学习java的第二天. 今天学习了java最基础的一些内容,照着 ...

  4. 2015年11月26日 Java基础系列(六)正则表达式Regex

    package com.demo.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * @autho ...

  5. 2015年11月26日 Java基础系列(五)异常Exception

    序,异常都是标准类Throwable的一些子类的对象. Throwable类的几个方法 1 getMessage() 返回描述该异常的信息 2 printStackTrace() 把消息和栈的跟踪记录 ...

  6. 2015年11月26日 Java基础系列(四)class的定义,继承和实现interface

    序,类的设计是JAVA操作的核心,面对对象思想中一切皆对象. 一.类定义中的变量 静态成员变量,为类所有,称为类变量:只有一份,编译时即分配值,使用关键字static声明. 非静态成员变量,每个实例一 ...

  7. 2015年11月26日 Java基础系列(一)之String与StringBuffer与StringBuilder的区别

    序,StringBuffer是线程安全的,StringBuilder是线程不安全的,但是StringBuilder操作速度快,因此在使用时要根据场景合理选择. StringBuffer和StringB ...

  8. 2015年11月26日 Java基础系列(三)ThreadLocal类初级学习

    序,ThreadLocal类是为了解决多线程的安全问题.线程安全的意思也就是说每个线程操作自己的变量,不要对其他线程的值造成影响. 在很多情况下,ThreadLocal比直接使用synchronize ...

  9. 2016年2月18日 JAVA基础

    运行JAVA之前,必须将系统环境变量进行配置. 如果是32位的计算机安装的JDK版本必须是32位的,如果是64位的计算机安装的JDK版本必须是64位的,两者不可忽视,以免程序无法正常启动. 具体更改方 ...

随机推荐

  1. ElasticSearch java客户端更新时出现的错误:NoNodeAvailableException[None of the configured nodes are available

    下午尝试 用ElasticSearch  的java客户端去做数据检索工作,测试了一下批量更新,代码如下: public static void bulkUpdateGoods(List<Goo ...

  2. Cesium官方教程6--相机

    相机(Camera) 相机控制了场景的观察视角.有很多相机操控方法,比如旋转.缩放.平移以及飞行定位.Cesium默认支持使用鼠标和触摸事件控制相机.Cesium也提供了一套可编程的相机控制API.这 ...

  3. Qt 中 Oracle 数据库 QOCI 驱动问题及解决

    Qt 中 Oracle 数据库 QOCI 驱动问题及解决是本文要讲述的问题,用Qt开发Oracle程序时,常会遇到QOCI驱动问题,主要表现为程序运行时出现下面的错误. QOCI driver not ...

  4. 如何获取UA?

    代码: function whatBrowser() { document.Browser.Name.value = navigator.appName; document.Browser.Versi ...

  5. Hallelujah Leonard Cohen

      Hallelujah 歌词   Leonard Cohen   Now I've heard there was a secret chord   我听说有一个隐秘的弦音   That David ...

  6. p2p通信原理及实现

    1.简介 当今互联网到处存在着一些中间件(MIddleBoxes),如NAT和防火墙,导致两个(不在同一内网)中的客户端无法直接通信.这些问题即便是到了IPV6时代也会存在,因为即使不需要NAT,但还 ...

  7. IOS和Andriod手机浏览器内核

    手机浏览器是基于什么内核?   如果细分的话,目前全球仅有四个独立的浏览器内核: 1. 微软IE的Trident 2. 网景最初研发后卖给Mozilla基金会并演化成火狐的Gecko 3. KDE的开 ...

  8. vue.js中如何使用scss

    要使用 <style lang="sass"> 請記得要裝相依的套件 $ npm install sass-loader node-sass vue-style-loa ...

  9. Android:状态栏禁用时蓝牙多文件传输弹窗及进度显示

    一.蓝牙文件传输弹窗 Android原生蓝牙传输文件时,会弹出蓝牙文件接收的确认框且默认是以notification的形式显示在状态栏,当用户点击之后才会弹出一个dialog.那么当状态栏被禁用时,如 ...

  10. 【转载】 一文看懂深度学习新王者「AutoML」:是什么、怎么用、未来如何发展?

    原文地址: http://www.sohu.com/a/249973402_610300 原作:George Seif 夏乙 安妮 编译整理 ============================= ...