Java基本语法_循环练习系列(二)——万年历
写万年历大致可以分为以下几个步骤:
1.根据用户输入的年份判断该年是否是闰年。
2.根据用户输入的月份计算该月的天数。
3.计算输入的年份之前的总天数。
4.计算输入的月份之前的天数。
5.计算该月的第一天是星期几,然后输出日历。
将这个大工程分为这几步就简单多了,可以很好的学习循环语句哦。
public class Test4 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("------万年历------");
System.out.print("请输入要查询的年份:");
Scanner input=new Scanner(System.in);
int year=input.nextInt();
boolean runNian;
int totalDays=0;
int days=0;
//判断改年为闰年还是平年
if((year%4==0&&year%100!=0)||year%400==0){
runNian=true;
}else{
runNian=false;
}
if(runNian){
System.out.println(year+"年是闰年");
}else{
System.out.println(year+"年是平年");
}
//计算该年之前一共的天数(从公元1年开始到输入年份前一年)
for(int i=1;i<year;i++){
if((i%4==0&&i%100!=0)||i%400==0){
totalDays+=366;
}else{
totalDays+=365;
}
}
System.out.println(year+"年之前一共有"+totalDays+"天");
//判断输入的月份有多少天,并且计算该月之前一共的天数
System.out.print("请输入要查询的月份:");
int month=input.nextInt();
int beforeDays=0;
int i=1;
do{
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days=31;break;
case 2:
if(runNian){
days=29;
}else{
days=28;
}
break;
default:
days=30;
break;
}
if(i<month){
beforeDays=beforeDays+days;
}
i++;
}while(i<=month);
totalDays+=beforeDays;
System.out.println(year+"年"+month+"月之前一共有"+beforeDays+"天");
System.out.println("该月有"+days+"天");
//输出日历,0代表星期日,1~6分别代表星期一到星期六(重点,以后注意看,这段是我写时卡克的地方)
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
int s=(totalDays+1)%7;
//输出空格
for(int nulNum=0;nulNum<s;nulNum++){
System.out.print("\t");
}
//在输完空格的位置上输出本月的日历
for(int j=1;j<=days;j++){
//该月第一天之前要输出的空格数,如果是星期五,前面输出5个空格
System.out.print(j+"\t");
if((totalDays+j)%7==6){
System.out.println();
}
}
}
}
Java基本语法_循环练习系列(二)——万年历的更多相关文章
- Java基本语法_循环练习系列(一)——模拟双色球
目前正在自学java中,学完循环这一块,简单写几个例子,使之更加熟练掌握循环语句和条件语句. 简述一下要这段代码要完成的任务: /*有33个红色球,16个蓝色球. 在33个里选6个 ,16个里选1个. ...
- 小白的java学习之路 “ 循环结构(二)”
一.for 循环 语法: for(表达式一;表达式二;表达式三){ 循环操作 } 表达式一:参数初始化 表达式二:条件判断 表达式三:更新循环变量 执行流程: 步骤一:执行表达式一.初始化参数 步骤二 ...
- Java 程序测试_循环语句中的break和continue
package test; public class Loop_Statement { public static void main(String [] args) { String[] newba ...
- java‘小秘密’系列(二)---Integer
java'小秘密'系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java'小秘 ...
- java基础解析系列(二)---Integer
java基础解析系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java基础解析 ...
- 062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用
062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用 本文知识点:二维数组应用 二维数组的声明和创建 ? 出现空指针异常 数组的名字指向数组的第 ...
- 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换
http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...
- java基础语法(二)--单列模式
java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...
- Java问题记录——循环里的二次判断与状态更新
Java问题记录——循环里的二次判断与状态更新 摘要:本文主要记录了在循环操作时可能出现的问题. 问题重现 在使用循环结构时,如果使用了定时任务,或者代码会多次调用循环结构,可能会导致有些对象会被循环 ...
随机推荐
- Java基础-集合框架的学习大纲
1.List 和 Set 的区别 2.HashSet 是如何保证不重复的 3.HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程环境下不安全)? 4.HashMap 的扩容过程 ...
- 自动化打包资源混淆集成python实践----打包
1.自动化打包方案 1)友盟多渠道多渠道打包 2)gradle productFlavors系统的条件编译 3)美团打包 4)APK文件注释写入渠道号 2.各打包方案简介 1)友盟多渠道多渠道打包(w ...
- EIP-uni-app框架-建立项目
uni-app介绍 uni-app 是一个使用 Vue.js 开发跨平台应用的前端框架,开发者编写一套代码,可编译到iOS.Android.H5.小程序等多个平台.uni-app在跨端数量,扩展能力, ...
- GDI+绘图基础
GDI+ 指的是.NET Framwork中提供的二维图像.图像处理等功能,是构成Windows操作系统的一个子系统,它提供了图形图像操作的应用程序编程接口(API). 使用GDI+可以用相同的方式在 ...
- 基于注解的AOP配置
配置文件 spring配置文件中的约束 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns ...
- C++期中考试
第一题1. 补足日期类实现,使得能够根据日期获取这是一年中第多少天.(12分) date.h #ifndef DATE_H #define DATE_H class Date { public: Da ...
- 【bzoj2190】: [SDOI2008]仪仗队 数论-欧拉函数
[bzoj2190]: [SDOI2008]仪仗队 在第i行当且仅当gcd(i,j)=1 可以被看到 欧拉函数求和 没了 /* http://www.cnblogs.com/karl07/ */ #i ...
- (Python OpenGL)【 0】关于VAO和VBO以及OpenGL新特性
(Python OpenGL)关于新版OpenGL需要了解的: 随着OpenGL状态和固定管线模式的移除,我们不在用任何glEnable函数调用,而且也不会有glVertex.glColor等函数调用 ...
- 树状数组【bzoj1103】: [POI2007]大都市meg
1103: [POI2007]大都市meg 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了. 不过,她经常回忆起以前在乡间漫步的情景.昔日,乡 ...
- linux网络编程中的基本概念
int close(int fd)(假设是服务器端) close 关闭了自身数据传输的两个方向.close一个TCP套接字的默认行为是把该套接字标记成已关闭,然后立即返回到调用进程.该套接字描述符不能 ...