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

  序:一直上网发现有人出软妹币求八字易经排盘系统方法或者源代码,更有此类软件竟要收费上百元。

  比如:http://bbs.csdn.net/topics/220008904

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

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

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

  我就细细说怎么排大运


  首先是八字基础  


  天干
甲乙丙丁戊己庚辛壬癸
甲、丙、戊、庚、壬为阳;乙、丁、己、辛、癸为阴
地支
子丑寅卯辰巳午未申酉戌亥
子、寅、辰、午、申、戌为阳支;丑卯巳未酉亥为阴支

八字:是由“年干,年支”、“月干,月支”、“日干,日支”、“时干,时支”组成

每一个组合称为“柱”,形成“年柱”、“月柱”、“日柱”、“时柱”,故八字又称为“四柱”或“四柱八字”

庚    己    庚    辛(日空戌、亥)
辰    卯    午    巳


排列方法成为:

年干          月干             日干            时干

年支          月支             日支            时支


有关如何用程序取出八字以前已经谈过

不再叙述


旧文章BUG勘误:
很多地方都是按照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

今天我写代码才发现原来那个类没有修改
用JAVA 取时柱算法:

   int time = cal.get(Calendar.HOUR_OF_DAY) / 2;

然后取子=0 丑=1就可以了

涉及到修改类:

BaZi.getYearGanZhi

  h=Gan[(offset+hour-1)%10]+Zhi[hour-1];

改为

  h=Gan[(offset+hour)%10]+Zhi[hour];

 

排大运:

阳男阴女顺排,阴男阳女逆排。(所谓阳年阴年,是指四柱中年干的阴阳而言,如甲、丙、戊、庚、壬之年为阳,乙、丁、己、辛、癸之年为阴。)

顺序按照

60甲子:

01 甲子 11 甲戌 21 甲申 31 甲午 41 甲辰 51 甲寅   

02 乙丑 12 乙亥 22 乙酉 32 乙未 42 乙巳 52 乙卯   

03 丙寅 13 丙子 23 丙戌 33 丙申 43 丙午 53 丙辰   

04 丁卯 14 丁丑 24 丁亥 34 丁酉 44 丁未 54 丁巳   

05 戊辰 15 戊寅 25 戊子 35 戊戌 45 戊申 55 戊午   

06 己巳 16 己卯 26 己丑 36 己亥 46 己酉 56 己未   

07 庚午 17 庚辰 27 庚寅 37 庚子 47 庚戌 57 庚申   

08 辛未 18 辛巳 28 辛卯 38 辛丑 48 辛亥 58 辛酉   

09 壬申 19 壬午 29 壬辰 39 壬寅 49 壬子 59 壬戌   

10 癸酉 20 癸未 30 癸巳 40 癸卯 50 癸丑 60 癸亥

比如上面那个八字

庚年为阳,男孩子要顺排,己卯之后便是庚辰   辛巳   壬午   癸未   甲申   乙酉   丙戌   丁亥  

会了么?

上代码吧:


引用到的类代码位置:

luozhuanghehun.LuozhuangshenshaHehun 位于
合婚算法之用JAVA实现简单级别的神煞合婚法

luozhuanglvhehun位于:
合婚算法之用JAVA实现呂才合婚法



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

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import luozhuanghehun.BaZi;
import luozhuanghehun.LuozhuangshenshaHehun;
import luozhuanghehun.luozhuanglvhehun;

/**
 *排大运
 * @author luozhuang 大师♂罗莊
 */
public class Luozhuangpaipandayun {

    LuozhuangshenshaHehun myLuozhuangshenshaHehun = new LuozhuangshenshaHehun();
    luozhuanglvhehun myluozhuanglvhehun = new luozhuanglvhehun();

    /**
     *
     * @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);

    }


    /**找数组中月柱起始位置
     *
     * @param jiazhi
     * @param yuezhu
     * @return
     */
    public int getyuezhuStart(String[] jiazhi, String yuezhu) {

        int start = -1;
        for (int i = 0; i < jiazhi.length; i++) {
            if (yuezhu.equals(jiazhi[i])) {
                start = i;
                break;
            }

        }

        return start;
    }
//顺行排大运

    private String[] shundayun(String yuezhu) {

        String[] DayunStringArray = new String[8];//取八个

        String[] jiazhi = myluozhuanglvhehun.jiazhi;
        int start = getyuezhuStart(jiazhi, yuezhu);
        if (start == -1) {
            return null;
        }
        else
        {
        start++;
        }
        for (int i = 0; i < 8; i++) {
            DayunStringArray[i] = jiazhi[(start + i) % jiazhi.length];
        }

        return DayunStringArray;

    }
//逆行排大运

    private String[] nidayun(String yuezhu) {
        String[] DayunStringArray = new String[8];//取八个

        String[] jiazhi = myluozhuanglvhehun.jiazhi;
        int start = getyuezhuStart(jiazhi, yuezhu);
        if (start == -1) {
            return null;
        }
         else
        {
               start--;
        }
        for (int i = 0; i < 8; i++) {
            DayunStringArray[i] = jiazhi[(start - i) % jiazhi.length];
        }

        return DayunStringArray;

    }
    //大运用月柱排

    public String[] Dayun(String nianzhu,String yuezhu, luozhuanglvhehun.sex isman) {
        String[] DayunStringArray = null;
        if (yuezhu == null || yuezhu.length() != 2) {
            return null;
        }


        //甲、丙、戊、庚、壬之年为阳,乙、丁、己、辛、癸之年为阴
        //阴年生男子(或阳年生女子),大运逆行否则顺行
        if (nianzhu.startsWith("甲") || nianzhu.startsWith("丙") || nianzhu.startsWith("戊") || nianzhu.startsWith("庚") || nianzhu.startsWith("庚") || nianzhu.startsWith("壬")) {
            if (isman == luozhuanglvhehun.sex.man) {//顺行
               DayunStringArray= shundayun(yuezhu);
            } else {
                DayunStringArray=nidayun(yuezhu);
            }

        } else {
            if (isman == luozhuanglvhehun.sex.man) {
               DayunStringArray= nidayun(yuezhu);
            } else {
                DayunStringArray=shundayun(yuezhu);
            }

        }
        return DayunStringArray;
    }

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

        BaZi lunar = new BaZi(cal);
        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.getYearGanZhi(time) + "】");
        //获取生肖
        System.out.println("此人的农历生肖【" + lunar.animalsYear() + "】");



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

        //五行纳音

        String soundyear = myLuozhuangshenshaHehun.getnumsix(ganziyear);
        String soundmonth = myLuozhuangshenshaHehun.getnumsix(ganzimonth);
        String soundday = myLuozhuangshenshaHehun.getnumsix(ganziday);
        String soundtime = myLuozhuangshenshaHehun.getnumsix(ganzitime);

        String[] DayunArray = Dayun(ganziyear,ganzimonth, isman);
        pringst(DayunArray);
        return null;
    }

    public static void pringst(String[] res) {
        for (int i = 0; i < res.length; i++) {
            System.out.print(res[i]);
            System.out.print("   ");
        }
        System.out.println("");
    }
    
        /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws ParseException {
     Luozhuangpaipandayun my=new Luozhuangpaipandayun();
     my.paipan("2000-3-13 11", luozhuanglvhehun.sex.man);
   
    }
}




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值