八字易经算法之用JAVA实现完整排盘系统

  去年一天,一个朋友去看望病人回来就惊奇的告诉我,他发现和他朋友一起住院(肝胆科)的病人无一例外都是属相为虎的病人,不是大一轮就是小一轮的。这是为什么呢?
  这不是什么偶然,也不是什么巧合。也许通过八字能告诉我们这些,也许通过预测能告诉他们应该早点检查肝胆,这样就能找点发现疾病。
  一直上网发现有人出软妹币求八字易经排盘系统方法或者源代码,更有此类软件竟要收费上百元。

  我上网查找半天也没有具体八字易经排盘系统原理的文章。

  排盘如同武学中的马步,拳法,是基础中的基础。

  作为易学高手的我(大师♂罗莊)对告诉各位码农如何八字易经排盘系统  负有不可推卸的责任。

  经过几天努力我把整个八字排盘系统开发以及讲述清楚了。

  希望大家喜欢

  这是最终效果:

run:
请输入你的年月日时间类似 2013-3-14 20
输入的是:2013-3-15 15
2013-3-15 15
此人农历的日期【二零一三年二月初四】
此人的农历生肖【蛇】
此人八字【癸巳 乙卯 庚辰 癸未】
年柱:天乙 太极 天罗 劫煞 
月柱:天乙 文昌 灾煞 吊客 
日柱:十恶大败日 国印 华盖 天喜 天罗 寡宿 
时柱:空亡 丧门 
此人四柱干支十神
伤官 正财 日主 伤官
此人年藏干
丙 七杀 庚 比肩 戊 偏印 
此人月藏干
乙 正财 
此人日藏干
癸 伤官 乙 正财 戊 偏印 
此人时藏干
乙 正财 丁 正官 己 正印 
此人大运
甲寅   癸丑   壬子   辛亥   庚戌   己酉   戊申   丁未   
此人起大运周岁:
3岁
此人大运生旺死绝
绝   墓   死   病   衰   帝旺   临官   冠带   
此人大运十神
偏财   伤官   食神   劫财   比肩   正印   偏印   正官   
此人大运神煞
天乙 月德 驿马 吊客 披麻    华盖 披麻    将星    文昌 驿马    金舆 红鸾 元辰    将星 羊刃 空亡 咸池    太极 天德 国印 禄 空亡    空亡 丧门    
此人流年
2014甲午  神煞:天乙 月德 空亡 咸池 丧门 
   2015乙未  神煞:空亡 丧门 
   2016丙申  神煞:太极 天德 国印 禄 空亡 
   2017丁酉  神煞:将星 羊刃 空亡 咸池 
   2018戊戌  神煞:金舆 红鸾 元辰 
   2019己亥  神煞:文昌 驿马 
   2020庚子  神煞:将星 
   2021辛丑  神煞:华盖 披麻 
   2022壬寅  神煞:天乙 驿马 吊客 披麻 
   2023癸卯  神煞:天乙 文昌 吊客 
   2024甲辰  神煞:月德 国印 华盖 天喜 天罗 
   2025乙巳  神煞:天乙 太极 天罗 
   2026丙午  神煞:天乙 空亡 咸池 丧门 
   2027丁未  神煞:空亡 丧门 
   2028戊申  神煞:太极 天德 国印 禄 空亡 
   2029己酉  神煞:将星 羊刃 空亡 咸池 
   2030庚戌  神煞:金舆 红鸾 元辰 
   2031辛亥  神煞:文昌 驿马 
   2032壬子  神煞:将星 
   2033癸丑  神煞:华盖 披麻 
   2034甲寅  神煞:天乙 月德 驿马 吊客 披麻 
   2035乙卯  神煞:天乙 文昌 吊客 
   2036丙辰  神煞:国印 华盖 天喜 天罗 
   2037丁巳  神煞:天乙 太极 天罗 
   2038戊午  神煞:天乙 空亡 咸池 丧门 
   2039己未  神煞:空亡 丧门 
   2040庚申  神煞:太极 天德 国印 禄 空亡 
   2041辛酉  神煞:将星 羊刃 空亡 咸池 
   2042壬戌  神煞:金舆 红鸾 元辰 
   2043癸亥  神煞:文昌 驿马 
   2044甲子  神煞:月德 将星 
   2045乙丑  神煞:华盖 披麻 
   2046丙寅  神煞:天乙 驿马 吊客 披麻 
   2047丁卯  神煞:天乙 文昌 吊客 
   2048戊辰  神煞:国印 华盖 天喜 天罗 
   2049己巳  神煞:天乙 太极 天罗 
   2050庚午  神煞:天乙 空亡 咸池 丧门 
   2051辛未  神煞:空亡 丧门 
   2052壬申  神煞:太极 天德 国印 禄 空亡 
   2053癸酉  神煞:将星 羊刃 空亡 咸池 
   2054甲戌  神煞:月德 金舆 红鸾 元辰 
   2055乙亥  神煞:文昌 驿马 
   2056丙子  神煞:将星 
   2057丁丑  神煞:华盖 披麻 
   2058戊寅  神煞:天乙 驿马 吊客 披麻 
   2059己卯  神煞:天乙 文昌 吊客 
   2060庚辰  神煞:国印 华盖 天喜 天罗 
   2061辛巳  神煞:天乙 太极 天罗 
   2062壬午  神煞:天乙 空亡 咸池 丧门 
   2063癸未  神煞:空亡 丧门 
   2064甲申  神煞:太极 天德 月德 国印 禄 空亡 
   2065乙酉  神煞:将星 羊刃 空亡 咸池 
   2066丙戌  神煞:金舆 红鸾 元辰 
   2067丁亥  神煞:文昌 驿马 
   2068戊子  神煞:将星 
   2069己丑  神煞:华盖 披麻 
   2070庚寅  神煞:天乙 驿马 吊客 披麻 
   2071辛卯  神煞:天乙 文昌 吊客 
   2072壬辰  神煞:国印 华盖 天喜 天罗 
   2073癸巳  神煞:天乙 太极 天罗 
   2074甲午  神煞:天乙 月德 空亡 咸池 丧门 
   2075乙未  神煞:空亡 丧门 
   2076丙申  神煞:太极 天德 国印 禄 空亡 
   2077丁酉  神煞:将星 羊刃 空亡 咸池 
   2078戊戌  神煞:金舆 红鸾 元辰 
   2079己亥  神煞:文昌 驿马 
   2080庚子  神煞:将星 
   2081辛丑  神煞:华盖 披麻 
   2082壬寅  神煞:天乙 驿马 吊客 披麻 
   2083癸卯  神煞:天乙 文昌 吊客 
   2084甲辰  神煞:月德 国印 华盖 天喜 天罗 
   2085乙巳  神煞:天乙 太极 天罗 
   2086丙午  神煞:天乙 空亡 咸池 丧门 
   2087丁未  神煞:空亡 丧门 
   2088戊申  神煞:太极 天德 国印 禄 空亡 
   2089己酉  神煞:将星 羊刃 空亡 咸池 
   2090庚戌  神煞:金舆 红鸾 元辰 
   2091辛亥  神煞:文昌 驿马 
   2092壬子  神煞:将星 
   2093癸丑  神煞:华盖 披麻 
   
此人婚姻神煞:
此人农历的日期【二零一三年二月初四】
此人八字【癸巳,乙卯,庚辰,癸未】
此人的农历生肖【蛇】
此人犯狼籍

成功构建 (总时间: 15 秒)

实现功能:

排八字四柱,五行,十神,四柱神煞

大运,大运神煞

流年,流年神煞

婚姻神煞


每一个知识点都在这几篇文章讲述清楚了,代码里面该注释都有了

建议初学者按顺序学习

如果对八字有了解,只是为了看看代码,那么可以随意浏览

八字易经算法之用JAVA实现排大运

八字易经算法之用JAVA实现生旺死绝和十神

八字易经算法之用JAVA实现排八字神煞

Java 计算节气的类

八字易经算法之用JAVA实现 地藏十神排法

合婚算法之用JAVA实现简单级别的神煞合婚法

八字神煞合婚算法,看看自己中了几枪


其他辅助文章:

JAVA计算真太阳时和地方时间

用JAVA实现串宫压运(串宫大法)排盘


八字易经算法之用JAVA实现最简单的称骨算命法

八字易经算法之用JAVA实现最简单的批八字算命

合婚算法之用JAVA实现本命卦合婚法

合婚算法之用JAVA实现呂才合婚法


最后要谈一个大问题就是怎么起四柱:



很多地方都是按照23:00-1:00为子时这是不对的。
子时24.00-2.00,丑时2.00-4.00,寅时4.00-6.00,卯时6.00-8.00,
 辰时8.00-10.00,巳时10.00-12.00,午时12.00-14.00,未时14.00-16.00
 申时16.00-18.00,酉时18.00-20.00,戌时20.00-22.00,亥时22.00-24.00

你试试看这个日期 1961年3月15日

你看看其他算法输出八字和书本万年历对么?

为什么月柱不对呢?

答:很多算法都是根据阳历转换没有考虑节气。

一般节气过了就算下个月

所以上面文章的月柱算不对

正确代码用Java 计算节气的类 算法来排月柱

本系统完整源代码:


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package luozhuangpaipan;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.util.Calendar;
import luozhuangChineseEra.Lunar;
import luozhuanghehun.BaZi;
import luozhuanghehun.LuozhuangshenshaHehun;
import luozhuanghehun.luozhuanglvhehun;

/**完整排盘系统
 *
 * @author luozhuang 大师♂罗莊
 */
public class LuozhuangPaipanClass {

    LuozhuangshenshaHehun myLuozhuangshenshaHehun = new LuozhuangshenshaHehun();
    luozhuanglvhehun myluozhuanglvhehun = new luozhuanglvhehun();
    Luozhuangpaipandayun myLuozhuangpaipandayun = new Luozhuangpaipandayun();
    LuozhuangshengSha myLuozhuangshengSha = new LuozhuangshengSha();
    luozhuangpaipanshisheng myluozhuangpaipanshisheng = new luozhuangpaipanshisheng();
    Luozhuangdizhang myLuozhuangdizhang = new Luozhuangdizhang();

    /**
     *
     * @param man 生日 yyyy-MM-dd HH
     * @return
     * @throws ParseException
     */
    public String paipan(String man, luozhuanglvhehun.sex isman) throws ParseException {

        Calendar mancal;

        try {
            mancal = myLuozhuangshenshaHehun.getCalendarfromString(man, "yyyy-MM-dd HH");
            //原来的private 方法改了下
        } catch (ParseException ex) {
            return "输入不正确" + ex.getMessage();
        }

        return paipan(mancal, isman);

    }

    public String paipan(Calendar cal, luozhuanglvhehun.sex isman) throws ParseException {


        BaZi lunar = new BaZi(cal);
        Lunar lunaryue = new Lunar(cal.getTime());
        System.out.println("此人农历的日期【" + lunar.toString() + "】");
        /**
         * 很多地方都是按照23:00-1:00为子时这是不对的。
         * 子时24.00-2.00,丑时2.00-4.00,寅时4.00-6.00,卯时6.00-8.00,
         * 辰时8.00-10.00,巳时10.00-12.00,午时12.00-14.00,未时14.00-16.00
         * 申时16.00-18.00,酉时18.00-20.00,戌时20.00-22.00,亥时22.00-24.00
         *
         */
        int time = cal.get(Calendar.HOUR_OF_DAY) / 2;

        //获取生肖
        System.out.println("此人的农历生肖【" + lunar.animalsYear() + "】");



        String GanZhi = lunar.getYearGanZhi(time);//取八字
        String[] tempchar = GanZhi.split(",");
        //我修改原来的,用,分割
        String ganziyear = lunaryue.getCyclicaYear();//年柱
        String ganzimonth = lunaryue.getCyclicaMonth();//月柱
        String ganziday = lunaryue.getCyclicaDay();//日柱
        String ganzitime = tempchar[3];//时柱

        System.out.println("此人八字【" + ganziyear + " " + ganzimonth + " " + ganziday + " " + ganzitime + "】");

        String[] arrayOfString = new String[9];

        arrayOfString[0] = "";
        arrayOfString[1] = ganziyear.substring(0, 1);//年干
        arrayOfString[2] = ganziyear.substring(1, 2);//年支
        arrayOfString[3] = ganzimonth.substring(0, 1);//月干
        arrayOfString[4] = ganzimonth.substring(1, 2);//月支
        arrayOfString[5] = ganziday.substring(0, 1);//日干
        arrayOfString[6] = ganziday.substring(1, 2);//日支
        arrayOfString[7] = ganzitime.substring(0, 1);//时干
        arrayOfString[8] = ganzitime.substring(1, 2);//时支
        System.out.println(myLuozhuangshengSha.shengsha(arrayOfString, isman));


        //排食神生旺死绝
        //用日干 日支分别查找位于表的对应值
        //修改原文的类方法字段属性为public
        //我的表格均是按照顺序比如
        //十天干生旺死绝表 十神概念按顺序排列
        //查找某一行就可以查到对应值
        String[] shengsibiao = {"甲", "丙", "戊", "庚", "壬", "乙", "丁", "己", "辛", "癸"};//十天干生旺死绝表顺序
        //十天干生旺死绝表 用日干查表

        int shengsibiaoshunxu = myLuozhuangpaipandayun.getyuezhuStart(shengsibiao, ganziday.substring(0, 1));
        //十神表按顺序
        int shishengbiaoshunxu = myLuozhuangpaipandayun.getyuezhuStart(BaZi.Gan, ganziday.substring(0, 1));

        shengsibiaoshunxu++;
        shishengbiaoshunxu++;


        String[] DayunArray = myLuozhuangpaipandayun.Dayun(ganziyear, ganzimonth, isman);

        //排此人四柱十神生旺死绝

        //       比    印    日元   劫   <- 这里直接用四柱干支计算 
        //乾造  庚    己    庚    辛
        //    辰    卯    午    巳    
        //藏干  乙戊癸  乙    己丁   庚丙戊  <- 这里直接用藏干计算
        //    才枭伤  才    印官   比杀枭  <- 这里直接用藏干计算
        //地势  养    胎    沐浴   长生   <- 藏干不算生旺死绝
        //纳音  白蜡金  城墙土  路旁土  白蜡金

        System.out.println("此人四柱干支十神");
        System.out.print(myluozhuangpaipanshisheng.shisheng[shishengbiaoshunxu][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shisheng[0], ganziyear.substring(0, 1))]); //十神表 用支查表
        System.out.print(" ");
        System.out.print(myluozhuangpaipanshisheng.shisheng[shishengbiaoshunxu][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shisheng[0], ganzimonth.substring(0, 1))]); //十神表 用支查表
        System.out.print(" ");
        System.out.print("日主"); //日柱不计算!
        System.out.print(" ");
        System.out.print(myluozhuangpaipanshisheng.shisheng[shishengbiaoshunxu][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shisheng[0], ganzitime.substring(0, 1))]); //十神表 用支查表

        System.out.println("");

        System.out.println("此人年藏干");
        String[] zhanggan = LuozhuangcommonClass.dizhuang(ganziyear.substring(1, 2));
        for (int i = 0; i < zhanggan.length; i++) {

            if (zhanggan[i] == null) {
                continue;
            }
            System.out.print(zhanggan[i]);
            System.out.print(" ");
            System.out.print(myluozhuangpaipanshisheng.shisheng[shishengbiaoshunxu][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shisheng[0], zhanggan[i])]); //十神表 用支查表
            System.out.print(" ");


        }
        System.out.println("");
        zhanggan = LuozhuangcommonClass.dizhuang(ganzimonth.substring(1, 2));
        System.out.println("此人月藏干");

        for (int i = 0; i < zhanggan.length; i++) {
            if (zhanggan[i] == null) {
                continue;
            }
            System.out.print(zhanggan[i]);
           System.out.print(" ");
            System.out.print(myluozhuangpaipanshisheng.shisheng[shishengbiaoshunxu][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shisheng[0], zhanggan[i])]); //十神表 用支查表
             System.out.print(" ");


        }
        System.out.println("");
        System.out.println("此人日藏干");
        zhanggan = LuozhuangcommonClass.dizhuang(ganziday.substring(1, 2));
        for (int i = 0; i < zhanggan.length; i++) {
            if (zhanggan[i] == null) {
                continue;
            }
            System.out.print(zhanggan[i]);
            System.out.print(" ");
            System.out.print(myluozhuangpaipanshisheng.shisheng[shishengbiaoshunxu][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shisheng[0], zhanggan[i])]); //十神表 用支查表
             System.out.print(" ");


        }

        System.out.println("");
        System.out.println("此人时藏干");
        zhanggan = LuozhuangcommonClass.dizhuang(ganzitime.substring(1, 2));
        for (int i = 0; i < zhanggan.length; i++) {
            if (zhanggan[i] == null) {
                continue;
            }
            System.out.print(zhanggan[i]);
            System.out.print(" ");
            System.out.print(myluozhuangpaipanshisheng.shisheng[shishengbiaoshunxu][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shisheng[0], zhanggan[i])]); //十神表 用支查表
             System.out.print(" ");


        }



        String[] DayunArrayshengsi = new String[DayunArray.length];//大运十天干生旺死绝表
        String[] DayunArrayshisheng = new String[DayunArray.length];//大运十神表


        for (int i = 0; i < DayunArray.length; i++) {
            DayunArrayshengsi[i] = myluozhuangpaipanshisheng.shengwang[0][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shengwang[shengsibiaoshunxu], DayunArray[i].substring(1, 2))]; //十天干生旺死绝表 用干查表

            DayunArrayshisheng[i] = myluozhuangpaipanshisheng.shisheng[shishengbiaoshunxu][myLuozhuangpaipandayun.getyuezhuStart(myluozhuangpaipanshisheng.shisheng[0], DayunArray[i].substring(0, 1))]; //十神表 用支查表


        }
        System.out.println("此人大运");
        myLuozhuangpaipandayun.pringst(DayunArray);

        System.out.println("此人起大运周岁:");
        System.out.println(myLuozhuangdizhang.dayunkaishi(cal, ganziyear.substring(0,1), isman)+ "岁");

        System.out.println("此人大运生旺死绝");
        myLuozhuangpaipandayun.pringst(DayunArrayshengsi);
        System.out.println("此人大运十神");
        myLuozhuangpaipandayun.pringst(DayunArrayshisheng);


        String[] DayunArrayshengsha = new String[DayunArray.length];

        for (int i = 0; i < DayunArray.length; i++) {

            DayunArrayshengsha[i] = myLuozhuangshengSha.shengshadayun(DayunArray[i], arrayOfString, isman);
        }



        System.out.println("此人大运神煞");
        myLuozhuangpaipandayun.pringst(DayunArrayshengsha);




        System.out.println("此人流年");

        int[] liunianarray = new int[80];
        int start = lunar.getnumberYear();
        start++;
        for (int i = 0; i < liunianarray.length; i++) {

            liunianarray[i] = start + i;
        }
        myLuozhuangpaipandayun.pringst(myLuozhuangshengSha.liunianshensha(liunianarray, arrayOfString, isman));

        System.out.println("此人婚姻神煞:");
        LuozhuangshenshaHehun myLuozhuangshenshaHehun = new LuozhuangshenshaHehun();
        System.out.println(myLuozhuangshenshaHehun.shensha(cal));

        return null;


    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws ParseException, IOException {
        LuozhuangPaipanClass my = new LuozhuangPaipanClass();
        System.out.println("请输入你的年月日时间类似 2013-3-14 20");
        BufferedReader strin = new BufferedReader(new InputStreamReader(System.in));
        String a = strin.readLine();
        System.out.println("输入的是:" + a);
        my.paipan(a, luozhuanglvhehun.sex.man);

    }
}


  • 8
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值