浏览 2393 次
锁定老帖子 主题:天干地支
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-10-10
想实现天干地支与数值的互换算法,在网上找到了一些相关信息,于是开工实现了。
目标: 已知 甲子 求得结果 1 已知 丙辰 求得结果 53 已知 55 求得结果 戊午
对应码表: 1.甲子 2.乙丑 3.丙寅 4.丁卯 5.戊辰 6.己巳 7.庚午 8.辛未
代码实现如下:
/** * <url>http://en.wikipedia.org/wiki/Sexagenary_cycle</url> */ public class Sexagenary { /** * 输入干支,输出对应数值。 */ public static int getValue(Stems stems, Branches branches) { int s = stems.ordinal() + 1; int b = branches.ordinal() + 1; int value = (6 * s - 5 * b + 60) % 60; return value; } /** * 输入数值,输出对应干支(String) */ public static String getStemsBranches(int num) { if (num < 1 || num > 60) { throw new IllegalArgumentException("Error input, num:" + num); } int s = ((num % 10) == 0) ? 10 : (num % 10); int b = ((num % 12) == 0) ? 12 : (num % 12); Stems stems = Stems.values()[s - 1]; Branches branches = Branches.values()[b - 1]; return "" + stems + branches; } public static void main(String[] args) { System.out.println(Sexagenary.getStemsBranches(1)); // 甲子 System.out.println(Sexagenary.getStemsBranches(53)); // 丙辰 System.out.println("" + Sexagenary.getValue(Stems.甲, Branches.子)); // 1 System.out.println("" + Sexagenary.getValue(Stems.丙, Branches.辰)); // 53 System.out.println("" + Sexagenary.getValue(Stems.戊, Branches.午)); // 55 } } enum Stems { 甲, 乙, 丙, 丁, 戊, 己, 庚, 辛, 壬, 癸; } enum Branches { 子, 丑, 寅, 卯, 辰, 巳, 午, 未, 申, 酉, 戌, 亥; }此外使用了 中文 作为枚举类型名(Java 支持中文的),并借助了枚举来替代数组的存储结构,简化了相关操作。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-10-10
public static final String[] TG = {"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"};
public static final String[] DZ = {"子","丑","寅","卯","辰","巳","午","未","辛","酉","戌","亥"}; public static void init(){ for(int i=0; i<60;i++){ String res = TG[i%TG.length]+DZ[i%DZ.length]; System.out.println((i+1)+" "+res); } } public static void main(String[] args) { init(); } 有些取巧 |
|
返回顶楼 | |