首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-02-15 06:40
  • 4545
  • 12975
blog.csdn.net

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

在这里插入图片描述

#一、小六壬背景介绍

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

    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

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

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]);
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

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

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]);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

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

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);
                    }
                }
            }
        }
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

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

#三、总结

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

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

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

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

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

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

参考文献:

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

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

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

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

注:本文转载自blog.csdn.net的钮钴禄·爱因斯晨的文章"https://blog.csdn.net/2401_87533975/article/details/145329377"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top