`
yunshu321
  • 浏览: 11683 次
社区版块
存档分类
最新评论

万年历小程序 In java

阅读更多

最近想到大学期间写的一个万年历小程序,写出来之后还很自豪。现在想想当时的程序逻辑混杂,结构紊乱,就在空闲时间重新写了个。本来以为二十多分钟就能写好了,结果写了一个多小时。。拿出来给我sdu大一的学弟学妹们参考一下吧。

 

ps:没有加入输入异常的处理,即默认输入正确的年份格式,如:2000。另外,最早查询年份到(含)1950年。

package JustForFun;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class JustForTest {
    public static void main(String argus[]) throws IOException {
        int year, count = 1, month = 1, index;
        System.out.println("输入你想查询的年份,我将输出这一年的日历,嘿嘿");
        BufferedReader reader = new BufferedReader(new InputStreamReader(
                System.in));
        year = Integer.valueOf(reader.readLine());
        System.out.println(year + "年的日历:");
        index = spaceCount(year)+1;
        while (month <= 12) {
            System.out.println(month + "月:");
            System.out.println("周日 周一 周二 周三 周四 周五 周六");
            printSpace(index - 1);
            while (count <= daysMonth(month, year)) {
                if (count < 10)
                    System.out.print(count + "    ");
                else System.out.print(count + "   ");
                index++;
                count++;
                if (index == 8) {
                    index = 1;
                    System.out.println();
                }
            }
            if (index != 1)
                System.out.println();
            count = 1;
            month++;
        }
    }
    //计算year的i月有多少天
    private static int daysMonth(int i, int year) {
        int[] month31 = {1, 3, 5, 7, 8, 10, 12};
        int[] month30 = {4, 6, 9, 11};
        for (int l = 0; l < month31.length; l++) {
            if (i == month31[l])
                return 31;
        }
        for (int l = 0; l < month30.length; l++) {
            if (i == month30[l])
                return 30;
        }
        if (daysCount(year) == 365)
            return 28;
        return 29;
    }
    //每个月从周几开始
    private static void printSpace(int count) {
        for (int i = 0; i < count; i++)
            System.out.print("     ");
    }
    //计算year有多少天
    private static int daysCount(int year) {
        if (year % 400 == 0)
            return 366;
        if (year % 100 == 0)
            return 365;
        if (year % 4 == 0)
            return 366;
        return 365;
    }
    //输入年份的一月从周几开始
    private static int spaceCount(int year) {
        int years = year - 1950;
        int days = 0;
        for (int i = 0; i < years; i++) {
            days += daysCount(1950 + i);
        }
        return days % 7;
    }
}
 
0
4
分享到:
评论
5 楼 yunshu321 2012-10-22  
cs6641468 写道
借组Calendar类,五分钟就可以了

如四楼嘛?其实也不是简单多少吧。。亲来写个试试
4 楼 dts228 2012-10-11  
public static void main(String argus[]) throws IOException  {
System.out.println("输入年:");
BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
String in = r.readLine();
Calendar c = Calendar.getInstance();
int inYear = Integer.parseInt(in);
c.set(Calendar.YEAR, inYear);
int day = 1;
int lastMouth = 0;
while (true) {
c.set(Calendar.DAY_OF_YEAR, day++);
if (c.get(Calendar.YEAR) > inYear) {
break;
}
int month = c.get(Calendar.MONTH) + 1;
int monthDay = c.get(Calendar.DAY_OF_MONTH);
int week = c.get(Calendar.DAY_OF_WEEK);
if (lastMouth != month) {
System.out.println();
System.out.println(month + "月");
System.out.println("周日 周一 周二 周三 周四 周五 周六");
lastMouth = month;
}
if(monthDay == 1){
for (int i = 0; i < (week-1) % 7; i++) {
System.out.print("    ");
}
}
if (monthDay < 10) {
System.out.print("   "+monthDay);
} else {
System.out.print("  "+ monthDay);
}
if(week % 7 == 0){
System.out.println();
}
}
}
3 楼 hellostory 2012-10-11  
使用Calendar可以减少很多代码,而且也容易很多!
2 楼 cs6641468 2012-10-11  
借组Calendar类,五分钟就可以了
1 楼 闪闪4521 2012-10-11  
干嘛要在main里面写那么多东西呢?

相关推荐

    Java写的小程序万年历

    ### Java编写的小程序万年历知识点解析 #### 一、程序功能概述 此Java小程序的主要功能是根据用户输入的年份和月份动态生成并显示指定月份的日历。该程序不仅能够正确处理平年与闰年的差异,还能准确计算出每个月的...

    如何用java里的Calendar类编写万年历

    Java 中使用 Calendar 类实现万年历 在 Java 中,使用 Calendar 类可以轻松地实现万年历的功能,无需手动判断年份是否为闰年或平年,也无需判断一个月有多少天。Calendar 类提供了多种方法来获取日期和时间信息,...

    java编写的万年历

    public class 万年历 { public static void main(String[] args){ Scanner input = new Scanner(System.in); int dayNum = 0; boolean isRn; int days=0; System.out.print("请输入年份:"); int year =...

    java源码包---java 源码 大量 实例

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    Java编程输出万年历

    本篇内容将基于提供的代码片段进行详细解析,旨在理解如何使用Java语言来实现这样一个万年历程序。 #### 代码解读 ##### 1. 导入必要的类库 ```java import java.util.Scanner; ``` 这里导入了`java.util....

    Java开发技术大全(500个源代码).

    firstApplet.java 第一个用Java开发的Applet小程序。 firstApplet.htm 用来装载Applet的网页文件 第2章 示例描述:本章介绍开发Java的基础语法知识。 accumulationByDoWhile.java 用do~while语句写的累加程序 ...

    java源码包3

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java源码包2

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    java万年历代码.java万年历代码

    本项目实现了一个简单的Java万年历程序,用户可以通过输入指定的年份和月份来查询该月的日历。程序首先会判断输入年份是否为闰年,并计算出指定月份的第一天是星期几,然后输出该月份的日历。 ### 2. 代码结构解析 ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    2个目标文件 摘要:Java源码,网络相关,UDP 基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式...

    java源码包4

     基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式的聊天软件,用socket实现,比较简单。 ...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    2个目标文件 摘要:Java源码,网络相关,UDP 基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式...

    java自学之道

    2.2.10 System.in对象和System.out对象 文件处理 3.1 创建或打开、关闭文件对象 3.2 关闭文件 3.3 read()方法 3.4 write()方法 3.5 其他操作文件的方法 4、Java异常处理 4.1 Java异常概念 4.2 异常类型 4.3 Java的...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

Global site tag (gtag.js) - Google Analytics