java 面向过程实现万年历

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 面向过程实现万年历的更多相关文章
- JAVA面向过程VS面向对象
面向过程 面向过程是一种自顶向下的编程,强调行为过程,可扩展性可维护性差. 优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源. 单片机.嵌入式开发.Linux/Unix等一般 ...
- 面向过程部分 Java 和 C++ 的区别
前言 Java 和 C++ 在面向过程部分区别并不大,但还是有的,本文罗列了这些区别. 在 Java 中: 1. 数据类型的范围和机器无关 2. 加上前缀 0b 可以表示二进制数,如 0b1001 就 ...
- 使用100%面向过程的思维方式来写java程序
1.java是强制写class关键字的语言,不能有独立的函数游离在类外出现在文件中,这和python c++ 都不同,后面的都可以单独在类外写函数,所以java被称为是纯面向对象的语言,py和c++都 ...
- 1.1(java学习笔记) 面向过程与面向对象
面向过程思考时,我们会先思考具体的步骤,第一步走什么,第二步做什么. 比如电脑新建文件夹,第一步:打开电脑 第二步:按下鼠标右键. 第三步:找到新建选项 第四步:点击新建选项下的文件夹 c语言是典型的 ...
- 四、java基础-面向过程_对象_类中可出现的因素
1.面向过程和面向对象区别: 1)面向过程:开发一个应用程序.一个项目,必须先了解整个过程,了解各个步骤.模块间的因果关系,使的面向过程方式去开发程序时,代码和代码之间的关联程度是非常强.所以其中任何 ...
- 【JAVA】笔记(2)---面向过程与面向对象;类,对象;实例变量,引用;构造方法;
面向过程与面向对象: 1.面向过程思想的典型栗子是C语言,C语言实现一个程序的流程是:在主函数中一步一步地罗列代码(定义子函数来罗列也是一样的道理),以此来实现我们想要的效果: 2.面向对象思想的典型 ...
- 【java基础】面向过程~面向对象
相信大家都知道这两个东西,可是大家是如何知道的呢?我们又该如何区分这个东西到底是面向过程还是面向对象的呢? 那,我们首先就要知道什么是面向过程,什么是面向对象: 面向过程"(Procedur ...
- Java基础知识强化20:面向对象和面向过程的思想对比
面向对象与面向过程的区别 1. 与面向对象编程思想相比较的,往往是面向过程的编程思想,其实在我来理解,两者并不冲突,原因是面向对象的编程也必须使用面向过程的思维来实现具体的功能,所以我认为,两者的区 ...
- 为什么大一先要学C语言(面向过程)再学C++或JAVA(面向对象)?
面向对象和面向过程各有千秋 一.面向过程与面向对象对比 面向过程:强调的是每一个功能的步骤,有很多很多方法组成,这些方法相互调用,完成需求. 面向对象:强调的是对象,然后由对象去调用功能. 面向过程 ...
随机推荐
- Java开源报表Jasper入门(2) -- 使用JasperSoft Studio创建一个简单报表
在接下来的教程中,我们将实现一个简单的JasperReports示例,展现其基本的开发.使用流程.文章很长,不过是以图片居多,文字并不多. 实例中使用最新的Jasper Studio5.2进行报表设计 ...
- Swift自适应布局(Adaptive Layout)教程(二)
给TextContainer中添加内容 打开 Main.storyboard ,从组件库(Object Library)中拖拽两个 Label 组件到TextContainer中,位置可以随意摆放: ...
- ashx调用session对象
1.引入命名空间 using System.Web.SessionState 2.必须实现接口 public class Login : IHttpHandler, IRequiresSessionS ...
- myeclipse修改内存
安装完成后,在安装目录有个config.ini文件,内容如下:-vmargs-Xms40m-Xmx256m Xms:初始化内存大小xmx:最大内存大小用编辑工具打开他,把Xms 和Xmx更改成自己需要 ...
- cobar和tddl分享
Cobar是阿里巴巴(B2B)部门开发的一种关系型数据的分布式处理系统,它可以在分布式的环境下看上去像传统数据库一样为您提供海量数据服务.那么具体说说我们为什么要用它,或说cobar--能干什么?以下 ...
- CDialog类中OnCancel()、OnInitDialog()作用
1.void CCOMDDlg::OnCancel() { // TODO: Add extra cleanup here CDialog::OnCancel();} 如果把CDialog::OnCa ...
- LeetCode-Divdend two Integers
题目: Divide two integers without using multiplication, division and mod operator. 思路分析 二分法.将除数不断增倍,而结 ...
- Hadoop基本原理之一:MapReduce
1.为什么需要Hadoop 目前,一块硬盘容量约为1TB,读取速度约为100M/S,因此完成一块硬盘的读取需时约2.5小时(写入时间更长).若把数据放在同一硬盘上,且全部数据均需要同一个程序进行处理, ...
- gridview中判断隐藏还是现实
<asp:TemplateField HeaderText="呼出" HeaderStyle-Width="60px" HeaderStyle-Horiz ...
- js与objective-c的交互-备
在写 JavaScript 的时候,可以使用一个叫做 window 的对象,像是我们想要从现在的网页跳到另外一个网页的时候,就会去修改 window.location.href 的位置:在我们的 Ob ...