我命由我,不由天,是魔是仙,算算就知道了~
欢迎来访~ 个人主页
欢迎各位佬们 互三哦~互三必回!!
#一、小六壬背景介绍
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
到某个特定值之间,一旦超出范围,立即返回错误提示,避免因非法数据导致程序崩溃或产生无意义的结果,体现了程序设计的健壮性原则。
自动获取日期功能借助Java
的java.util.Date
和java.time.LocalDate
类库实现。java.util.Date
类用于获取当前系统时间,而java.time.LocalDate
类则提供了更便捷、语义更清晰的日期处理方法。通过这些类的相关方法,程序能够实时获取当前日期,无需用户手动输入,大大提升了用户体验,使程序更贴合实际使用场景。
打印所有运势模块通过循环
和字符串拼接
技术,将小六壬所有可能的运势结果完整展示。使用for循环
遍历存储运势信息的数组或集合,将每个运势项按一定格式拼接成完整的字符串输出,方便用户全面了解小六壬的运势体系。
需要明确的是,这套程序仅仅是基于技术实现的娱乐
项目。小六壬作为传统占卜术,缺乏科学依据证明其预测命运的准确性。在现实生活中,我们的命运由自身的努力、选择以及外部环境等多种因素共同决定。开发这组程序,旨在通过技术手段探索传统文化,将古老的智慧以现代编程方式呈现。希望大家在体验时,能以理性的态度看待程序结果,把它当作一种趣味消遣,同时坚信自身具备塑造未来的能力。
参考文献:
**《李淳风时课》
**唐代历算家李淳风所创 “六壬时课” 的相关记载,是小六壬的重要源头。其中详细阐述了小六壬的基本推算方法,如从 “大安” 上起正月,月上起日,日上起时等具体操作方式
**《迷信历》
**清朝沈亮功著,其中有小六壬的内容,对于了解小六壬在清朝时期的流传和应用有一定的参考价值
《中国古代命书经典:增补万全玉匣记》
:由李真人著、赵嘉宁译。该书包含了中国古代各种命书的相关内容,其中可能有对小六壬的解读和应用案例,有助于从更广泛的古代命书体系中理解小六壬