java之小六壬算命代码实现——预知自己命运如何!

我命由我,不由天,是魔是仙,算算就知道了~
欢迎来访~ 个人主页
欢迎各位佬们 互三哦~互三必回!!

在这里插入图片描述

#一、小六壬背景介绍

1.文化起源

小六壬作为中国古代占卜法,文化背景深厚。起源说法不一,流传较广的是唐代李淳风创立 “六壬时课”,即小六壬,以区别 “大六壬”。也有东汉起源、黄帝时代传说、马前课演化、鬼谷子传承等观点。其发展历程中,唐朝创立后在民间流传,用于日常生活预测;明朝刘基将其用于军事决策;清朝乾隆年间被记载于历书;近现代应用范围扩大,还传播到日本演变成 “孔明六曜”。小六壬与天干地支、阴阳五行紧密相连,通过大安、留连、速喜、赤口、小吉、空亡六个神煞在手掌位置的分布,代表不同含义与象意,体现古人对事物状态和发展趋势的认知,反映出天人合一的思想。

2.起卦步骤

**确定时辰:**明确要预测事项的具体时辰,将时辰对应十二地支,如子时为 23 点 - 1 点,丑时为 1 点 - 3 点等,这是起卦的基础时间要素。

**确定基数:**一般以农历的月、日、时为基数进行计算。比如农历三月初五,辰时起卦,三月对应数字 3,初五对应数字 5 ,辰时对应数字 5。

计算落点:将月、日、时对应的数字相加,然后用总和除以 6,取余数。以上述例子来说,3+5+5=13,13÷6 余数为 1 。

**对应神煞:**余数 1 对应大安,2 对应留连,3 对应速喜,4 对应赤口,5 对应小吉,0(整除时视为 6)对应空亡,根据对应的神煞解读运势。

3.卦象解读

  • 大安:身不动时,五行属木,颜色青色,方位东方,临青龙。代表一切静止、平安、吉祥,问事主吉,如出行平安,谋事易成,求财可得。
  • 留连:人未归时,五行属水,颜色黑色,方位北方,临玄武。象征事情会有延迟、纠缠,问事多为不利,如失物难寻,出行遇阻,求财难成。
  • 速喜:人即至时,五行属火,颜色红色,方位南方,临朱雀。意味着事情会快速发展且有喜事,如问官事有理,求财有喜,寻人可见。
  • 赤口:官事凶时,五行属金,颜色白色,方位西方,临白虎。表示会有口舌是非、争斗,诸事不利,如出行有灾,求财无利,谨防小人。
  • 小吉:人来喜时,五行属木,临六合。代表有小的吉祥、顺利,多有和合之事,如出行顺利,交易可成,求财可得。
  • 空亡:音信稀时,五行属土,颜色黄色,方位中央,临勾陈。寓意诸事无成、落空,如求财无利,寻人不见,出行有失。

#二、代码分析

根据上述起卦步骤我们可以总结出运算规律:将农历数字相加,总和除以6取余,根据余数分别对应卦象。

此时,我们可以借助JAVA做一个简单的代码实现。

package com.itheima;
import java.util.Scanner;
public class xiaoliuren {
    public static void main(String[] args) {
        System.out.println("请输入农历月份:");
        Scanner sc = new Scanner(System.in);
        int month = sc.nextInt();
        System.out.println("请输入农历日期:");
        int date = sc.nextInt();
        System.out.println("请输入时辰:");
        int time = sc.nextInt();
        String[] guaXiang = {"大安:身不动时,五行属木,颜色青色,方位东方,临青龙。代表一切静止、平安、吉祥,问事主吉,如出行平安,谋事易成,求财可得。","留连:人未归时,五行属水,颜色黑色,方位北方,临玄武。象征事情会有延迟、纠缠,问事多为不利,如失物难寻,出行遇阻,求财难成。","速喜:人即至时,五行属火,颜色红色,方位南方,临朱雀。意味着事情会快速发展且有喜事,如问官事有理,求财有喜,寻人可见。","赤口:- 官事凶时,五行属金,颜色白色,方位西方,临白虎。表示会有口舌是非、争斗,诸事不利,如出行有灾,求财无利,谨防小人。" +
                "- ","小吉:人来喜时,五行属木,临六合。代表有小的吉祥、顺利,多有和合之事,如出行顺利,交易可成,求财可得。","空亡:音信稀时,五行属土,颜色黄色,方位中央,临勾陈。寓意诸事无成、落空,如求财无利,寻人不见,出行有失。"};
        int result = (month+date+time)%6;
        System.out.println("小六壬起卦结果为:"+ guaXiang[result]);21

    }
}

结合实际情况,我们的月、日、时都是由具体意义的,应该有数值限制。我们可以将代码完善如下:

package com.itheima;
import java.util.Scanner;
public class xiaoliuren {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int month, date, time;

        // 输入月份并进行取值限制
        do {
            System.out.println("请输入农历月份(1-12):");
            month = sc.nextInt();
        } while (month < 1 || month > 12);

        // 输入日期并进行取值限制
        do {
            System.out.println("请输入农历日期(1-30):");
            date = sc.nextInt();
        } while (date < 1 || date > 30);

        // 输入时辰并进行取值限制
        do {
            System.out.println("请输入时辰(1-12):");
            time = sc.nextInt();
        } while (time < 1 || time > 12);

        String[] guaXiang = {"大安:身不动时,五行属木,颜色青色,方位东方,临青龙。代表一切静止、平安、吉祥,问事主吉,如出行平安,谋事易成,求财可得。","留连:人未归时,五行属水,颜色黑色,方位北方,临玄武。象征事情会有延迟、纠缠,问事多为不利,如失物难寻,出行遇阻,求财难成。","速喜:人即至时,五行属火,颜色红色,方位南方,临朱雀。意味着事情会快速发展且有喜事,如问官事有理,求财有喜,寻人可见。","赤口:- 官事凶时,五行属金,颜色白色,方位西方,临白虎。表示会有口舌是非、争斗,诸事不利,如出行有灾,求财无利,谨防小人。" +
                "- ","小吉:人来喜时,五行属木,临六合。代表有小的吉祥、顺利,多有和合之事,如出行顺利,交易可成,求财可得。","空亡:音信稀时,五行属土,颜色黄色,方位中央,临勾陈。寓意诸事无成、落空,如求财无利,寻人不见,出行有失。"};
        int result = (month+date+time)%6;
        System.out.println("小六壬起卦结果为:"+ guaXiang[result]);
    }
}

我们知道了运算方法是否可以导入当日时间日期使其自动运算?代码实现如下:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoField;

public class ni {
    public static void main(String[] args) {
        // 获取当前日期和时间
        LocalDate currentDate = LocalDate.now();
        LocalTime currentTime = LocalTime.now();

        // 将当前日期和时间转换为农历日期和时辰
        int lunarMonth = currentDate.get(ChronoField.MONTH_OF_YEAR);
        int lunarDay = currentDate.get(ChronoField.DAY_OF_MONTH);
        int lunarHour = currentTime.get(ChronoField.HOUR_OF_DAY) / 2 + 1;

        // 小六壬起卦
        String[] guaXiang = {"大安:身不动时,五行属木,颜色青色,方位东方,临青龙。代表一切静止、平安、吉祥,问事主吉,如出行平安,谋事易成,求财可得。",
                "留连:人未归时,五行属水,颜色黑色,方位北方,临玄武。象征事情会有延迟、纠缠,问事多为不利,如失物难寻,出行遇阻,求财难成。",
                "速喜:人即至时,五行属火,颜色红色,方位南方,临朱雀。意味着事情会快速发展且有喜事,如问官事有理,求财有喜,寻人可见。",
                "赤口:官事凶时,五行属金,颜色白色,方位西方,临白虎。表示会有口舌是非、争斗,诸事不利,如出行有灾,求财无利,谨防小人。",
                "小吉:人来喜时,五行属木,临六合。代表有小的吉祥、顺利,多有和合之事,如出行顺利,交易可成,求财可得。",
                "空亡:音信稀时,五行属土,颜色黄色,方位中央,临勾陈。寓意诸事无成、落空,如求财无利,寻人不见,出行有失。"};

        int result = (lunarMonth + lunarDay + lunarHour) % 6;
        System.out.println("小六壬起卦结果为:" + guaXiang[result]);
    }
}

那么我们拓展一下,我们是否可以借助这个程序将一辈子的运势都算出来呢?

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.temporal.ChronoField;

public class ni {
    public static void main(String[] args) {
        // 获取当前日期
        LocalDate currentDate = LocalDate.now();

        // 定义一个数组来存储每个月的天数
        int[] daysInMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

        // 小六壬起卦
        String[] guaXiang = {"大安:身不动时,五行属木,颜色青色,方位东方,临青龙。代表一切静止、平安、吉祥,问事主吉,如出行平安,谋事易成,求财可得。",
                "留连:人未归时,五行属水,颜色黑色,方位北方,临玄武。象征事情会有延迟、纠缠,问事多为不利,如失物难寻,出行遇阻,求财难成。",
                "速喜:人即至时,五行属火,颜色红色,方位南方,临朱雀。意味着事情会快速发展且有喜事,如问官事有理,求财有喜,寻人可见。",
                "赤口:官事凶时,五行属金,颜色白色,方位西方,临白虎。表示会有口舌是非、争斗,诸事不利,如出行有灾,求财无利,谨防小人。",
                "小吉:人来喜时,五行属木,临六合。代表有小的吉祥、顺利,多有和合之事,如出行顺利,交易可成,求财可得。",
                "空亡:音信稀时,五行属土,颜色黄色,方位中央,临勾陈。寓意诸事无成、落空,如求财无利,寻人不见,出行有失。"};

        // 循环遍历从当前日期开始的每一天
        for (int year = currentDate.getYear(); year <= currentDate.getYear() + 1; year++) {
            for (int month = currentDate.getMonthValue(); month <= 12; month++) {
                int days = daysInMonth[month - 1];
                if (month == 2 && year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) {
                    days = 29;
                }
                for (int day = currentDate.getDayOfMonth(); day <= days; day++) {
                    for (int hour = 0; hour < 12; hour++) {
                        // 将当前日期和时间转换为农历日期和时辰
                        int lunarMonth = currentDate.get(ChronoField.MONTH_OF_YEAR);
                        int lunarDay = currentDate.get(ChronoField.DAY_OF_MONTH);
                        int lunarHour = hour + 1;

                        int result = (lunarMonth + lunarDay + lunarHour) % 6;
                        System.out.println(year + "年" + month + "月" + day + "日" + hour + "时:" + guaXiang[result]);

                        // 增加一天
                        currentDate = currentDate.plusDays(1);
                    }
                }
            }
        }
    }
}

是不是很神奇?感觉有种掌握自己命运的感觉?

#三、总结

在探索 Java 编程与传统文化融合的过程中,我开发了一套基于 Java 的小六壬算命程序。该程序包含基本程序、数值限制、自动获取日期和打印所有运势四个主要部分,每个部分都有其独特的技术实现与作用。

基本程序是整个系统的核心逻辑,运用面向对象编程思想,将小六壬的算法封装成独立的类和方法。通过复杂的条件判断语句,依据不同的输入参数精准匹配对应的卦象与运势解读。例如,利用switch语句对计算得出的卦象编号进行判断,从而返回相应的运势描述,确保整个运算流程的准确性和高效性。

数值限制部分则通过数据校验技术保障程序的稳定性。在接受用户输入时,运用正则表达式或if - else条件判断,对输入数值进行严格的范围限定。比如,规定输入的数字必须在 0 到某个特定值之间,一旦超出范围,立即返回错误提示,避免因非法数据导致程序崩溃或产生无意义的结果,体现了程序设计的健壮性原则。

自动获取日期功能借助Javajava.util.Datejava.time.LocalDate类库实现。java.util.Date类用于获取当前系统时间,而java.time.LocalDate类则提供了更便捷、语义更清晰的日期处理方法。通过这些类的相关方法,程序能够实时获取当前日期,无需用户手动输入,大大提升了用户体验,使程序更贴合实际使用场景。

打印所有运势模块通过循环字符串拼接技术,将小六壬所有可能的运势结果完整展示。使用for循环遍历存储运势信息的数组或集合,将每个运势项按一定格式拼接成完整的字符串输出,方便用户全面了解小六壬的运势体系。

需要明确的是,这套程序仅仅是基于技术实现的娱乐项目。小六壬作为传统占卜术,缺乏科学依据证明其预测命运的准确性。在现实生活中,我们的命运由自身的努力、选择以及外部环境等多种因素共同决定。开发这组程序,旨在通过技术手段探索传统文化,将古老的智慧以现代编程方式呈现。希望大家在体验时,能以理性的态度看待程序结果,把它当作一种趣味消遣,同时坚信自身具备塑造未来的能力。

参考文献:

**《李淳风时课》**唐代历算家李淳风所创 “六壬时课” 的相关记载,是小六壬的重要源头。其中详细阐述了小六壬的基本推算方法,如从 “大安” 上起正月,月上起日,日上起时等具体操作方式

**《迷信历》**清朝沈亮功著,其中有小六壬的内容,对于了解小六壬在清朝时期的流传和应用有一定的参考价值

《中国古代命书经典:增补万全玉匣记》:由李真人著、赵嘉宁译。该书包含了中国古代各种命书的相关内容,其中可能有对小六壬的解读和应用案例,有助于从更广泛的古代命书体系中理解小六壬

不作溢美之词,不作浮夸文章,此文与功名进取毫不相关也!努力学习,精进技术,与大家共勉!

评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值