java 这么获取农历_用JAVA查询中国农历年

用来查询农历年的代码,可能比较粗糙,希望不要太打击偶,哈哈。

一,Console.java[用来获取控制台的输入]

/*

#(@)Console.java 20:40:25 2/2/2006

控制台消息输入/输出。

*/

import java.io.*;

import java.text.SimpleDateFormat;

import java.util.Calendar;

public final class Console {

public Console() {}

private static SimpleDateFormat style = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

/**

* 根据提示返回用户的输入

*

* @param s String 控制台输入提示

* @return String 返回用户的控制台输入

*/

public String read(String m) {

String s = null;

System.out.println(m);

try {

BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

s = in.readLine();

} catch (IOException ex) {

printError(this.getClass().getName(), "read(String s)", ex.getMessage());

}

return s;

}

/**

* 根据提示返回用户的输入

*

* @param s String 控制台输入提示

* @return String 返回用户的控制台输入

*/

public int readInt(String s) {

int x;

try {

x = Integer.parseInt(this.read(s));

} catch (NumberFormatException ex) {

x = 0;

printError(this.getClass().getName(), "readInt(String s)", ex.getMessage());

}

return x;

}

/**

* 根据提示返回用户的输入

*

* @param s String 控制台输入提示

* @return String 返回用户的控制台输入

*/

public Double readDouble(String s) {

double x;

try {

x = Double.parseDouble(this.read(s));

} catch (NumberFormatException ex) {

x = 0;

printError(this.getClass().getName(), "readInt(String s)", ex.getMessage());

}

return x;

}

/**

* 打印错误消息

*

* @param c String 类名

* @param m String 方法名

* @param e String 错误信息

*/

public void printError(String c, String m, String e) {

System.out.println(style.format(Calendar.getInstance().getTime()) + ":调用"+ c + "." + m + "方法时发生错误:" + e + "。");

}

/**

* main(String[] args)方法

*/

public static void main(String[] args) {

Console c = new Console();

System.out.println(c.readDouble("请输入Double类型的数字……"));

}

}

二,Chinese.java[计算农历年的代码]

/*

#(@)Chinese.java 21:56:25 2/2/2006

中国农历。干支纪年始于公元四年,即第一个甲子年,故甲、子位于数组中的第四位。

*/

import java.text.SimpleDateFormat;

import java.util.Calendar;

public final class Chinese {

public Chinese() {}

private Console c = new Console();

/*天干数组*/

private String[] s = {"庚", "辛", "壬", "癸", "甲", "乙", "丙", "丁", "戊", "己"};

/*地支数组*/

private String[] t = {"申", "酉", "戌", "亥", "子", "丑", "寅", "卯", "辰", "巳", "午", "未"};

/*十二生肖*/

private String[] g = {"猴", "鸡", "狗", "猪", "鼠", "牛", "虎", "兔", "龙", "蛇", "马", "羊"};

private String again = null;

/**

* 根据用户的输入确定继续查询或退出运行

*

*/

public void chinese() {

if (this.chineseera()) {

String s = c.read("提示:按回车键退出,重新查询请输入新的年数后按回车键。");

if (s != null && !s.trim().equals("")) {

again = s;

this.chinese();

} else {

System.exit(0);

}

}

}

/**

* 根据用户的输入查询农历年和生肖属相,如果没有用户输入,则按当前年度开始查询

*

*/

private boolean chineseera() {

boolean b = false;

String year = null;

if (again == null) {

year = c.read("请输入准备查询农历年的年数,完成后按回车键。");

if (year == null || year.equals("")) {

SimpleDateFormat style = new SimpleDateFormat("yyyy");

year = style.format(Calendar.getInstance().getTime());

}

} else {

year = again;

}

int i = this.last(year);

if (i != -1) {

int y = this.cathay(year);

System.out.println(year + "年是农历"+ s[i] + t[y] +"年,十二生肖中属"+ g[y] +"。");

b = true;

}

return b;

}

/**

* 取得字符串的最后一位字符并转换成数字型变量

* 取得天干时的算法,主要是用最后一位数字对应天干数组中的数位字符

*

* @param s String 用户输入的年数

* @return int 返回转换后的最后一位数字,如果发生错误,则返回-1

*/

private int last(String s) {

int y = 0;

if (s != null) {

try {

s = s.substring(s.length()-1, s.length());

y = Integer.parseInt(s);

} catch (NumberFormatException ex) {

y = -1;

c.printError(this.getClass().getName(), "last(String s)", ex.getMessage());

}

}

return y;

}

/**

* 取得字符串除以十二以后的余数

* 取得地支时的算法,主要是用除以十二以后的余数对应地支数组中的数位字符

* 十二生肖的算法也与此相同

*

* @param s String 用户输入的年数

* @return int 返回除以十二以后的余数

*/

private int cathay(String s) {

int y = 0;

try {

y = Integer.parseInt(s);

y %= 12;

} catch (NumberFormatException ex) {

c.printError(this.getClass().getName(), "cathay(String s)", ex.getMessage());

}

return y;

}

/**

* main(String[] args)方法

*/

public static void main(String[] args) {

Chinese cathay = new Chinese();

cathay.chinese();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527019.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 最大分词算法_Java实现的最大匹配分词算法详解

本文实例讲述了java实现的最大匹配分词算法。分享给大家供大家参考,具体如下:全文检索有两个重要的过程:1分词2倒排索引我们先看分词算法目前对中文分词有两个方向,其中一个是利用概率的思想对文章分词。 也就是如果两个字&#x…

java 集合迭代器_Java中的集合迭代器

集合的迭代器任何集合都有迭代器。任何集合类,都必须能以某种方式存取元素,否则这个集合容器就没有任何意义。迭代器,也是一种模式(也叫迭代器模式)。在java中它是一个对象,其目的是遍历并选中其中的每个元素,而使用者…

git关闭密码自动存储_项目在 git 里怎样合理的保存配置文件(服务器密码等敏感内容)...

办法其实很多,有两种较常用。第一种是配置文件不提交真实内容,只提交一个模板文件。每个开发者克隆之后按照自己的环境补完配置文件,这样自然而然就独立出来了(需更改文件名并忽略有效配置文件)。如果配置文件很大配置项很多,此法…

isfull mysql_Mysql8.0及以上版本,关于only_full_group_by的问题

mysql8.0及以上版本,关于only_full_group_by的问题:ERROR 1055 (42000): Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column postscan.verifyDelayLog.auditor which is not functionally dependent on column…

java jnotify_Jnotify文件监控的用法以及Jar文件导入的方法

简介Jnotiy, 支持动态监控(支持级联监控)文件夹和文件的jar包。在linux中,调用linux底层的jnotify服务。在windows中,需要添加附件的dll文件。因为通用的Maven仓库中没有此Jar文件,pom.xml文件需要如下配置:net.contentobjects.jn…

java 异常练习题_Java 异常(习题)

异常Key Point* 异常的概念和分类* 异常的产生和传递* 异常的处理* 自定义异常练习1. 填空Java 中所有的错误都继承自throwable类;在该类的子类中,Error类表示严重的底层错误,对于这类错误一般处理的方式是不要求我们对其处理Exception类表示…

mysql 半同步 主主_MySQL主从,半同步,主主复制

MySQL Replication我们知道,MySQL数据库的二进制日志记录着每一个明确或者潜在可能导致数据库发生改变的sql语句,因此我们可以基于二进制日志来实现mysql的主从一致。而我们在此提到的mysql的复制的简单过程就是:首先mysql的主服务器(Master)…

java local_java.time.LocalDateTime with()方法

java.time.LocalDateTime with()方法java.time.LocalDateTime.with(TemporalAdjuster adjuster)方法返回此日期时间的调整副本。1 语法public LocalDateTime with(TemporalAdjuster adjuster)2 参数adjuster:要使用的调整器,而不是null。3 返回值一个Loc…

java 数据队列_Java 数据结构 - 队列

Java 数据结构 - 队列我们今天要讲的数据结构是队列,比如 Java 线程池任务就是队列实现的。1. 什么是队列和栈一样,队列也是一种操作受限的线性结构。使用队列时,在一端插入元素,而在另一端删除元素。1.1 队列的主要特性队列中的数…

java中死锁_关于java中死锁的总结

关于死锁,估计很多程序员都碰到过,并且有时候这种情况出现之后的问题也不是非常好排查,下面整理的就是自己对死锁的认识,以及通过一个简单的例子来来接死锁的发生,自己是做python开发的,但是对于死锁的理解…

eclipse java的jvm匹配_eclipse设置jvm

Java虚拟机默认分配64M内存,如果你的应用比较大,超出64M内存,Java虚拟机就会抛出outOfMemoryError,并停止运行。不管是什么应用(Web应用、Application等),只需要修改你的机器上的运行Java命令,在javaxxx命令…

java+set+split_阿里资深工程师教你如何优化 Java 代码!

原标题:阿里资深工程师教你如何优化 Java 代码!作者 | 王超责编 | 伍杏玲明代王阳明先生在《传习录》谈为学之道时说:私欲日生,如地上尘,一日不扫,便又有一层。着实用功,便见道无终穷&#xff0…

java返回特定下标元素_java基础--输出数组中指定元素的下标

java基础--输出数组中指定元素的下标java基础--输出数组中指定元素的下标package com.lcn.day05;public class ArrayDemo8 {/*** 输出数组指定元素的下标*/public static void main(String[] args) {//定义一个数组int[] array new int[]{123,456,789,321,654,987};int index …

java钱币换算_Java编写钱币转换为大写程序

import java.text.DecimalFormat;public class ChangeMonney {private static final String[] STR_UNIT {"零", "壹", "贰", "叁", "肆", "伍","陆", "柒", "捌", "玖"…

java mongodb 使用场景_mongodb使用场景一般是什么?mongodb有哪些基本命令?

此前我们已经充分了解过了mongodb的原理及各种概念,你们知道一般在什么场景下才会使用mongodb吗?下面通过文章来了解一下吧。一、mongodb基本命令1)、数据库切换use admin;2)、浏览当前数据库db;3)、浏览全部数据库show dbs;4)、删除数据库use test;db.dropDatabas…

java desktop mailto,mailto在Java?

I am trying to set a hyperlink in my eclipse java project.when someone clicks on a button, it should open up an email client along with the givenemail id. is it possible to implement it with java.awt.Desktop?解决方案Yes it is possible using desktop.mail()…

myVariable是java标识符吗_java 标识符与变量

一、Java 标识符三要素1.标识符由字母、下划线(_)、美元符号($)或者字母组成。2.标识符应以字母、下划线(_)、美元符开头。3.标识符字符大小写敏感,长度无限制。标识符最重要的就是 见名知意并且不能与java关键字重名!二、Java 变量1.java变量是程序中最基本的单元。…

使java代码更干净_java如何使用Lombok更优雅地编码

Lombok简介和其他语言相比,Java经常因为不必要的冗长被批评。Lombok提供了一系列注解用以在后台生成模板代码,将其从你的类中删除,从而有助于保持你的代码整洁。较少的模板意味着更简洁的代码,更易于阅读和维护。在本文中&#xf…

java自动创建月份_使用Java根据月份动态绘制BarGraph

您需要通过每次更改来更新数据集.我添加了一个updateDataset()方法,并在几个关键位置调用了它.private void updateDataset() {dataset.clear();for (int i 1; i < finalday; i) {dataset.setValue(i, "Marks", "" i);}笔记&#xff1a;>不要使用绝…

mysql 5.6.23 源码包安装报错_Ubuntu 14.10下编译安装MySQL 5.6.23

1. 安装环境&#xff1a;Ubuntu Server 14.10MySQL-5.6.23.tar.gz2. 安装必备的工具sudo apt-get install make bison g build-essential libncurses5-dev cmake3. 添加组合用户 设置安装目录权限sudo groupadd mysqlsudo useradd –g mysql mysql –s /bin/false #创建用户mys…