八字易经算法之用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);
   
    }
}




  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 周易是中国古代的经典之一,其中包含了很多卜筮算命的内容,对于许多人来说是一种很有趣的文化现象。而随着科技的不断发展,现在我们也可以利用计算机算法来进行周易算命。其中,Java是一种非常流行的编程语言,也被很多人用来开发算法Java算法大全是指Java编程语言中所包含的各种算法的集合。通过这些算法,人们可以对各种数据进行处理和分析,帮助解决各种问题。其中就包括了周易算命的算法,可以通过输入生辰八字等信息,计算出不同方面的预测结果。 一般来说,周易算命的算法包含三个大的方面,即易学、卜卦和神数。其中易学是指对易经文本进行解读,从中获取各种卜筮结果的方法;卜卦则是通过六十四卦和八卦来进行卜筮;神数则是根据日期和时间等信息来计算出各种预测结果。Java算法大全中包含的周易算命算法一般都是基于这三个方面开发的。 Java算法大全提供了很多不同的周易算命的实现方式,开发者可以根据自己的需要选择不同的算法。一些算法可能会涉及到比较复杂的数学计算,需要开发者对算法背后的数学原理进行深入的了解。同时,为了提高算法的效率和准确性,开发者也可以选择使用一些第三方库和工具,如Apache Math和JCL等。 总之,Java算法大全中包含了很多不同的周易算命算法,可以帮助人们快速地进行卜筮预测。同时,开发者也可以通过学习这些算法,了解到周易算命的文化内涵和数学原理。 ### 回答2: 周易是中国古代的一本著名的占卜算命书籍,也是中国古代哲学的重要组成部分。周易通过阐述八卦和六十四卦来揭示万物的变化和人生的命运。而Java是一种流行的编程语言,具有强大的计算和处理数据的能力。 Java算法大全是指Java语言下,各种常用算法实现集合。在周易算命中,我们可以利用Java算法实现卦的卜算和推演。给定初始卦象和占卜所需的参数,可以通过不同的算法来完成这一过程。 例如,可以使用递归函数来根据卦象的阴阳变化关系,计算出卜筮的结果。通过在Java中编写相应的代码,可以从用户输入的初始卦象开始,逐步生成六十四卦的变化序列。在每一步中,根据用户指定的查询值,可以判断当前卜筮的结果,从而推算出未来的命运。 此外,还可以借助Java中的算法,对生成的六十四卦序列进行序,以便更方便地查找特定卦象和相关信息。 总之,借助Java算法大全的各种功能,我们可以更详细、准确地实现周易算命过程中的各种计算和推演。这样的实现不仅提高了算命的效率,也让周易算命更加科学、有效。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值