public class Test {

     /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 定义变量
int year, mouth;
int day = 0;
String cuowu;
Scanner sc = new Scanner(System.in);
int[] day1 = new int[] { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int[] day2 = new int[] { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
int week, dayNum = 0; // 输出
System.out.println("*******************欢迎使用万年历****************\n");
System.out.print("请选择年份:");
// 判断是否输入我们需要的数据
while (true) {
if (sc.hasNextInt()) {
year = sc.nextInt();
if (year >= 1900) {
break;
} else {
System.out.print("输入数据不对请重新输入(1900年以后的年份)");
}
} else {
System.out.print("数据类型错误请重新输入");
cuowu = sc.next();
}
} System.out.println();
System.out.print("请选择月份:");
while (true) {
if (sc.hasNextInt()) {
mouth = sc.nextInt();
if (mouth > 0 && mouth < 13) {
break;
} else {
System.out.print("输入数据不对请重新输入(1~12)");
}
} else {
System.out.print("数据类型错误请重新输入");
cuowu = sc.next();
}
}
System.out.println();
// 计算该年距离1900年1月1日有几天
for (int i = 1900; i < year; i++) {
if ((i / 400 == 0) || (i / 4 == 0 && i / 100 != 0)) {
day += 366;
} else {
day += 365;
}
}
// System.out.println(day);
// 计算选择月份1日距离1900年1月1日有几天
for (int i = 1; i < mouth; i++) {
if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) {
day += day2[i - 1];
} else {
day += day1[i - 1];
}
}
// System.out.println(day);
// 计算该月第一天是星期几由于1900年1月1日是星期一,而我们打印从星期天开始,所以day+1
week = (day + 1) % 7;
// System.out.println(week);
// 赋值dayNum该月有几天
switch (mouth) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
dayNum = 31;
break;
case 4:
case 6:
case 9:
case 11:
dayNum = 30;
break;
case 2:
if ((year % 400 == 0) || ((year % 100 != 0) && (year % 4 == 0))) {
dayNum = 29;
} else {
dayNum = 28;
}
break;
default:
break;
}
// 输出
System.out.println("\t\t\t" + year + "年" + mouth + "月");
System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
for (int i = 0; i < week; i++) {
System.out.print("" + "\t");
}
for (int i = 1; i <= dayNum; i++) {
System.out.print(i + "\t");
if ((week + i) % 7 == 0) {
System.out.println();
}
} } }

java 面向过程实现万年历的更多相关文章

  1. JAVA面向过程VS面向对象

    面向过程 面向过程是一种自顶向下的编程,强调行为过程,可扩展性可维护性差. 优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源. 单片机.嵌入式开发.Linux/Unix等一般 ...

  2. 面向过程部分 Java 和 C++ 的区别

    前言 Java 和 C++ 在面向过程部分区别并不大,但还是有的,本文罗列了这些区别. 在 Java 中: 1. 数据类型的范围和机器无关 2. 加上前缀 0b 可以表示二进制数,如 0b1001 就 ...

  3. 使用100%面向过程的思维方式来写java程序

    1.java是强制写class关键字的语言,不能有独立的函数游离在类外出现在文件中,这和python c++ 都不同,后面的都可以单独在类外写函数,所以java被称为是纯面向对象的语言,py和c++都 ...

  4. 1.1(java学习笔记) 面向过程与面向对象

    面向过程思考时,我们会先思考具体的步骤,第一步走什么,第二步做什么. 比如电脑新建文件夹,第一步:打开电脑 第二步:按下鼠标右键. 第三步:找到新建选项 第四步:点击新建选项下的文件夹 c语言是典型的 ...

  5. 四、java基础-面向过程_对象_类中可出现的因素

    1.面向过程和面向对象区别: 1)面向过程:开发一个应用程序.一个项目,必须先了解整个过程,了解各个步骤.模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强.所以其中任何 ...

  6. 【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;

    面向过程与面向对象: 1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果: 2.面向对象思想的典型 ...

  7. 【java基础】面向过程~面向对象

    相信大家都知道这两个东西,可是大家是如何知道的呢?我们又该如何区分这个东西到底是面向过程还是面向对象的呢? 那,我们首先就要知道什么是面向过程,什么是面向对象: 面向过程"(Procedur ...

  8. Java基础知识强化20:面向对象和面向过程的思想对比

    面向对象与面向过程的区别  1. 与面向对象编程思想相比较的,往往是面向过程的编程思想,其实在我来理解,两者并不冲突,原因是面向对象的编程也必须使用面向过程的思维来实现具体的功能,所以我认为,两者的区 ...

  9. 为什么大一先要学C语言(面向过程)再学C++或JAVA(面向对象)?

    面向对象和面向过程各有千秋 一.面向过程与面向对象对比  面向过程:强调的是每一个功能的步骤,有很多很多方法组成,这些方法相互调用,完成需求. 面向对象:强调的是对象,然后由对象去调用功能. 面向过程 ...

随机推荐

  1. 用Scertify Professional实现代码审查

    用Scertify Professional实现代码审查 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs Scertify Professional是一 ...

  2. c++ 依据输入动态声明数组(一维,二维)

    较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #includ ...

  3. js将日期格式的时候转换成时间搓

    自己写的一个方法 function split_time(time){//将当前时间转换成时间搓  例如2013-09-11 12:12:12   var arr=time.split(" ...

  4. Android HOME纽带,BACK主要采集和响应

    1.onUserLeaveHint 相比Home键(HOME)而近期应用的关键(APP_SWITCH)治,回车键很简单.复onKeyDown可以实现,如以下: @Override public boo ...

  5. 验证docker的Redis镜像也存在未授权访问漏洞

    看到了这篇老外的博客:Over 30% of Official Images in Docker Hub Contain High Priority Security Vulnerabilities于 ...

  6. Hacker(19)----检测Windows系统漏洞

    想完全掌握Windows中存在的漏洞需要使用专业的漏洞扫描软件.目前常用的有MBSA(MircosoftBaselineSecurityAnalyzer).360安全卫士等. 一.使用MBSA检测系统 ...

  7. DotNet程序汉化过程--SnippetCompiler简单解说

    SnippetCompiler介绍 平时要验证一段C#代码或者写一个算法,就得打开庞大的VS新建一个解决方案,占用了硬盘空间不说还费时费力.SnippetCompiler这个工具就可以在这里帮到我们了 ...

  8. Javascript高级程序设计读书笔记(第六章)

    第6章  面向对象的程序设计 6.2 创建对象 创建某个类的实例,必须使用new操作符调用构造函数会经历以下四个步骤: 创建一个新对象: 将构造函数的作用域赋给新对象: 执行构造函数中的代码: 返回新 ...

  9. 巧记--Css选择器

    love  ------>   hate 即: a:link   -->  a:visited  -->  a:hover   -->  a:active a:link     ...

  10. OWIN启动项的检测

    OWIN启动项的检测 通过以下方法设置启动项: 命名约定 Katana在命名空间内查找StartUp类 OwinStartup Attribute [assembly: OwinStartup(typ ...