写万年历大致可以分为以下几个步骤:

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基本语法_循环练习系列(二)——万年历的更多相关文章

  1. Java基本语法_循环练习系列(一)——模拟双色球

    目前正在自学java中,学完循环这一块,简单写几个例子,使之更加熟练掌握循环语句和条件语句. 简述一下要这段代码要完成的任务: /*有33个红色球,16个蓝色球. 在33个里选6个 ,16个里选1个. ...

  2. 小白的java学习之路 “ 循环结构(二)”

    一.for 循环 语法: for(表达式一;表达式二;表达式三){ 循环操作 } 表达式一:参数初始化 表达式二:条件判断 表达式三:更新循环变量 执行流程: 步骤一:执行表达式一.初始化参数 步骤二 ...

  3. Java 程序测试_循环语句中的break和continue

    package test; public class Loop_Statement { public static void main(String [] args) { String[] newba ...

  4. java‘小秘密’系列(二)---Integer

    java'小秘密'系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java'小秘 ...

  5. java基础解析系列(二)---Integer

    java基础解析系列(二)---Integer 前言:本系列的主题是平时容易疏忽的知识点,只有基础扎实,在编码的时候才能更注重规范和性能,在出现bug的时候,才能处理更加从容. 目录 java基础解析 ...

  6. 062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用

    062 01 Android 零基础入门 01 Java基础语法 07 Java二维数组 01 二维数组应用 本文知识点:二维数组应用 二维数组的声明和创建 ? 出现空指针异常 数组的名字指向数组的第 ...

  7. 【JAVA编码】 JAVA字符编码系列二:Unicode,ISO-8859,GBK,UTF-8编码及相互转换

    http://blog.csdn.net/qinysong/article/details/1179489 这两天抽时间又总结/整理了一下各种编码的实际编码方式,和在Java应用中的使用情况,在这里记 ...

  8. java基础语法(二)--单列模式

    java基础语法(二)--单列模式 /** * 功能:单列模式 * @author Administrator * */ public class SingletonTest { public sta ...

  9. Java问题记录——循环里的二次判断与状态更新

    Java问题记录——循环里的二次判断与状态更新 摘要:本文主要记录了在循环操作时可能出现的问题. 问题重现 在使用循环结构时,如果使用了定时任务,或者代码会多次调用循环结构,可能会导致有些对象会被循环 ...

随机推荐

  1. C++笔记--函数

    函数的定义和声明 函数的声明和定义都必须描述相同的类型,但是声明可以不写参数名,定义则必须写参数名,但是他们的参数名字可以不同. 一个局部变量被声明为static,那么这个局部变量将只会被初始化一次, ...

  2. Linux下boost编译安装

    说明:下面内容仅针对Linux环境(boost官网为:http://www.boost.org/,可从这里下载它的源代码包,这里要求下载.tar.gz包,而非.7z..zip或bz2包). 在当前目录 ...

  3. .net 索引器

    索引器允许类或结构的实例就像数组一样进行索引. 索引器类似于属性,不同之处在于它们的访问器采用参数. 在下面的示例中,定义了一个泛型类,并为其提供了简单的 get 和 set 访问器方法(作为分配和检 ...

  4. 第一个SpringMVC程序(最简单的)

      注册中央调度器,这个中央调度器就是org.springframework.web.servlet.DispatcherServlet这个类(web.xml servlet-name节点的名字,必须 ...

  5. Unity中Awake的执行时间点

    https://docs.unity3d.com/ScriptReference/MonoBehaviour.Awake.html 根据官方文档,Awake的实际执行点,应该是对应mono脚本所在物体 ...

  6. C++: STL迭代器及迭代器失效问题

    转载至:http://blog.csdn.net/wangshihui512/article/details/9791517 迭代器失效: 典型的迭代器失效. 首先对于vector而言,添加和删除操作 ...

  7. 温故而知新_C语言_前缀++(--)和后缀++(--)

    前缀++(--)和后缀++(++)是有区别的. 再单独使用的时候是没有区别的,都是自身递增或者递减1. 但是综合使用起来会一样吗? 下面的例子都是++,替换成--也是一样,道理都是一样的. 请先看下面 ...

  8. netty下载源码并导入idea

    netty源码导入eclipse会有一些兼容性问题,网上有解决方案,官方推荐idea,故此用idea. 拷贝git地址:https://github.com/netty/netty.git 使用git ...

  9. spoj Longest Common Substring

    Longest Common Substring SPOJ - LCS 题意:求两个串的最长公共子串 /* 对一个串建立后缀自动机,用另一个串上去匹配 */ #include<iostream& ...

  10. Shell-2-命令之乐

    1.cat (1)基本用法 [root@cai tmp]# cat 1.txt 2.txt this is a test1 this is a test 2 (2)cat -s file(删除额外空白 ...