最近学习人工智能时遇到一个好用的网站分享给大家: 人工智能学习 文末有投票,评论区有红包哦!
在前段时间更新了赛博算命系列,出乎我的意料反响很好。也受到广大网友的赞赏,今天将继续更新赛博算命系列——使用八字来算事业运。我在前几篇文章中更新过关于八字排盘的,其实内容很片面只是算了四柱。在博大精深的算命文化中,这不够严谨。分析一个事情要全方位考虑,也就比较复杂。比如算事业运,可以根据八字也可以根据六爻。根据八字但不能只根据八字,要算四柱,五行,十神,流年和格局。总的来说是很复杂很麻烦,写这篇博客也花了会很大的心力。由衷感叹古人的智慧博大精深!
四柱由 “年柱、月柱、日柱、时柱” 组成,每组干支分别对应出生的时间维度,各有其象征意义:
package sizhu;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class sizhu {
// 天干数组
private static final String[] TIANGAN = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"};
// 地支数组
private static final String[] DIZHI = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};
// 月份地支数组,正月为寅,依次类推
private static final String[] MONTH_DIZHI = {"寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥", "子", "丑"};
// 五虎遁年起月诀映射,用于根据年干确定月干
private static final Map<Character, Integer> YEAR_MAP = new HashMap<>();
// 五鼠遁日起时诀映射,用于根据日干确定时干
private static final Map<Character, Integer> DAY_MAP = new HashMap<>();
static {
// 初始化五虎遁年起月诀映射
YEAR_MAP.put('甲', 2);
YEAR_MAP.put('乙', 4);
YEAR_MAP.put('丙', 6);
YEAR_MAP.put('丁', 8);
YEAR_MAP.put('戊', 10);
YEAR_MAP.put('己', 2);
YEAR_MAP.put('庚', 4);
YEAR_MAP.put('辛', 6);
YEAR_MAP.put('壬', 8);
YEAR_MAP.put('癸', 10);
// 初始化五鼠遁日起时诀映射
DAY_MAP.put('甲', 0);
DAY_MAP.put('乙', 2);
DAY_MAP.put('丙', 4);
DAY_MAP.put('丁', 6);
DAY_MAP.put('戊', 8);
DAY_MAP.put('己', 0);
DAY_MAP.put('庚', 2);
DAY_MAP.put('辛', 4);
DAY_MAP.put('壬', 6);
DAY_MAP.put('癸', 8);
}
/**
* 根据年份获取年柱
* @param year 年份
* @return 年柱,如 "甲辰"
*/
public static String getYearColumn(int year) {
int tgIndex = (year - 3) % 10;
int dzIndex = (year - 3) % 12;
return TIANGAN[tgIndex] + DIZHI[dzIndex];
}
/**
* 根据年柱和月份获取月柱
* @param yearColumn 年柱
* @param month 月份
* @return 月柱,如 "丁卯"
*/
public static String getMonthColumn(String yearColumn, int month) {
int tgIndex = YEAR_MAP.get(yearColumn.charAt(0)) + month - 1;
tgIndex = tgIndex % 10;
int dzIndex = month - 1;
return TIANGAN[tgIndex] + MONTH_DIZHI[dzIndex];
}
/**
* 根据蔡勒公式计算日柱,此处简化处理
* 实际应用中需要完整实现蔡勒公式并进行精确计算
* @param year 年份
* @param month 月份
* @param day 日期
* @return 日柱,如 "丙午"
*/
public static String getDayColumn(int year, int month, int day) {
// 蔡勒公式核心逻辑省略,这里简单假设一个固定结果
int tgIndex = 0;
int dzIndex = 0;
return TIANGAN[tgIndex] + DIZHI[dzIndex];
}
/**
* 根据日柱和时辰获取时柱
* @param dayColumn 日柱
* @param hour 时辰
* @return 时柱,如 "戊子"
*/
public static String getHourColumn(String dayColumn, int hour) {
int tgIndex = DAY_MAP.get(dayColumn.charAt(0)) + hour / 2;
tgIndex = tgIndex % 10;
int dzIndex = hour / 2;
return TIANGAN[tgIndex] + DIZHI[dzIndex];
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入出生年份:");
int year = scanner.nextInt();
System.out.print("请输入出生月份:");
int month = scanner.nextInt();
System.out.print("请输入出生日期:");
int day = scanner.nextInt();
System.out.print("请输入出生时辰(0 - 23):");
int hour = scanner.nextInt();
// 计算年柱
String yearColumn = getYearColumn(year);
// 计算月柱
String monthColumn = getMonthColumn(yearColumn, month);
// 计算日柱
String dayColumn = getDayColumn(year, month, day);
// 计算时柱
String hourColumn = getHourColumn(dayColumn, hour);
System.out.println("八字为:" + yearColumn + " " + monthColumn + " " + dayColumn + " " + hourColumn);
scanner.close();
}
}
请输入出生年份:2006
请输入出生月份:2
请输入出生日期:15
请输入出生时辰(0 - 23):20
八字为:丁亥 癸卯 甲子 甲戌
TIANGAN
(甲到癸共 10 个)DIZHI
(子到亥共 12 个)MONTH_DIZHI
(正月为寅,符合传统命理规则)YEAR_MAP
:五虎遁年起月诀的映射关系DAY_MAP
:五鼠遁日起时诀的映射关系YEAR_MAP
和DAY_MAP
的具体映射值,这些值是根据传统命理中的 “五虎遁” 和 “五鼠遁” 规则设定的getYearColumn(int year)
:根据年份计算年柱getMonthColumn(String yearColumn, int month)
:根据年柱和月份计算月柱getDayColumn(int year, int month, int day)
:计算日柱(简化实现)getHourColumn(String dayColumn, int hour)
:根据日柱和时辰计算时柱判断要点:若命局中某五行过旺,需通过事业 “疏导”(如木旺用火泄秀,从事火属性行业);若某五行过弱,需补其力量(如金弱,可从事金属性行业增强事业根基)。
干支与五行的对应规则(核心依据) 每个天干、地支都有固定的五行属性,这是五行计算的基础:
例:八字 “庚午、壬午、甲申、庚午” 中,天干 “庚、壬、甲” 分别对应金、水、木;地支 “午、午、申、午” 分别对应火、火、金、火。
package wuxing;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class wuxing {
// 天干与五行的对应关系 - 修复变量名
private static final Map<Character, String> TIAN_GAN_WU_XING = new HashMap<>();
// 地支与五行的对应关系 - 修复变量名
private static final Map<Character, String> DI_ZHI_WU_XING = new HashMap<>();
static {
// 初始化天干五行 - 这里的引用已经正确
TIAN_GAN_WU_XING.put('甲', "木");
TIAN_GAN_WU_XING.put('乙', "木");
TIAN_GAN_WU_XING.put('丙', "火");
TIAN_GAN_WU_XING.put('丁', "火");
TIAN_GAN_WU_XING.put('戊', "土");
TIAN_GAN_WU_XING.put('己', "土");
TIAN_GAN_WU_XING.put('庚', "金");
TIAN_GAN_WU_XING.put('辛', "金");
TIAN_GAN_WU_XING.put('壬', "水");
TIAN_GAN_WU_XING.put('癸', "水");
// 初始化地支五行 - 这里的引用已经正确
DI_ZHI_WU_XING.put('子', "水");
DI_ZHI_WU_XING.put('丑', "土");
DI_ZHI_WU_XING.put('寅', "木");
DI_ZHI_WU_XING.put('卯', "木");
DI_ZHI_WU_XING.put('辰', "土");
DI_ZHI_WU_XING.put('巳', "火");
DI_ZHI_WU_XING.put('午', "火");
DI_ZHI_WU_XING.put('未', "土");
DI_ZHI_WU_XING.put('申', "金");
DI_ZHI_WU_XING.put('酉', "金");
DI_ZHI_WU_XING.put('戌', "土");
DI_ZHI_WU_XING.put('亥', "水");
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入四柱(年柱、月柱、日柱、时柱,用空格分隔,例如:丁亥 壬寅 甲子 丙寅):");
String input = scanner.nextLine();
// 修复:使用 \\s+ 正则表达式处理任意数量的空白字符分隔,并先trim去除首尾空格
String[] pillars = input.trim().split("\\s+");
// 验证输入是否正确 - 后续验证逻辑不变
if (pillars.length != 4) {
System.out.println("输入格式错误,请输入四个柱,用空格分隔");
return;
}
for (String pillar : pillars) {
if (pillar.length() != 2) {
System.out.println("输入格式错误,每个柱应该由两个字组成:" + pillar);
return;
}
}
// 计算五行分布
Map<String, Integer> fiveElements = calculateFiveElements(pillars);
// 输出结果
System.out.println("\n五行分布统计:");
System.out.println("木:" + fiveElements.get("木"));
System.out.println("火:" + fiveElements.get("火"));
System.out.println("土:" + fiveElements.get("土"));
System.out.println("金:" + fiveElements.get("金"));
System.out.println("水:" + fiveElements.get("水"));
scanner.close();
}
/**
* 根据四柱计算五行分布
*/
private static Map<String, Integer> calculateFiveElements(String[] pillars) {
Map<String, Integer> result = new HashMap<>();
// 初始化五行计数
result.put("木", 0);
result.put("火", 0);
result.put("土", 0);
result.put("金", 0);
result.put("水", 0);
for (String pillar : pillars) {
// 每个柱由一个天干和一个地支组成
char tianGan = pillar.charAt(0); // 天干
char diZhi = pillar.charAt(1); // 地支
// 计算天干对应的五行并计数 - 已修复变量名引用
String tgWx = TIAN_GAN_WU_XING.get(tianGan);
if (tgWx != null) {
result.put(tgWx, result.get(tgWx) + 1);
} else {
System.out.println("未知的天干:" + tianGan);
}
// 计算地支对应的五行并计数 - 已修复变量名引用
String dzWx = DI_ZHI_WU_XING.get(diZhi);
if (dzWx != null) {
result.put(dzWx, result.get(dzWx) + 1);
} else {
System.out.println("未知的地支:" + diZhi);
}
}
return result;
}
}
请输入四柱(年柱、月柱、日柱、时柱,用空格分隔,例如:丁亥 壬寅 甲子 丙寅):
丁亥 癸卯 甲子 甲戌
五行分布统计:
木:3
火:1
土:1
金:0
水:3
main
方法(程序入口)作为程序的控制中心,负责以下流程:
Scanner
接收用户输入的四柱信息(如 “丁亥 壬寅 甲子 丙寅”)。calculateFiveElements
方法,获取五行分布结果。Scanner
,避免资源泄露。calculateFiveElements
方法(核心计算)作为工具方法,封装了五行分布的计算逻辑,具体职责:
Map<String, Integer>
用于存储五行的数量,初始值均为 0。TIAN_GAN_WU_XING
和DI_ZHI_WU_XING
映射表获取对应的五行;Map
返回给主方法。十神是根据日主(日干)与其他干支的五行生克关系,结合阴阳属性推导而出的十种符号,代表不同的人际关系和事物属性。
package shishen;
import java.util.*;
public class shishen {
// 天干的阴阳属性: 阳为true,阴为false
private static final Map<Character, Boolean> tianGanYinYang = new HashMap<>();
// 天干的五行属性
private static final Map<Character, String> tianGanWuXing = new HashMap<>();
// 地支的五行属性
private static final Map<Character, String> diZhiWuXing = new HashMap<>();
// 地支的阴阳属性
private static final Map<Character, Boolean> diZhiYinYang = new HashMap<>();
static {
// 初始化天干阴阳属性
tianGanYinYang.put('甲', true); // 阳
tianGanYinYang.put('乙', false); // 阴
tianGanYinYang.put('丙', true); // 阳
tianGanYinYang.put('丁', false); // 阴
tianGanYinYang.put('戊', true); // 阳
tianGanYinYang.put('己', false); // 阴
tianGanYinYang.put('庚', true); // 阳
tianGanYinYang.put('辛', false); // 阴
tianGanYinYang.put('壬', true); // 阳
tianGanYinYang.put('癸', false); // 阴
// 初始化天干五行
tianGanWuXing.put('甲', "木");
tianGanWuXing.put('乙', "木");
tianGanWuXing.put('丙', "火");
tianGanWuXing.put('丁', "火");
tianGanWuXing.put('戊', "土");
tianGanWuXing.put('己', "土");
tianGanWuXing.put('庚', "金");
tianGanWuXing.put('辛', "金");
tianGanWuXing.put('壬', "水");
tianGanWuXing.put('癸', "水");
// 初始化地支五行
diZhiWuXing.put('子', "水");
diZhiWuXing.put('丑', "土");
diZhiWuXing.put('寅', "木");
diZhiWuXing.put('卯', "木");
diZhiWuXing.put('辰', "土");
diZhiWuXing.put('巳', "火");
diZhiWuXing.put('午', "火");
diZhiWuXing.put('未', "土");
diZhiWuXing.put('申', "金");
diZhiWuXing.put('酉', "金");
diZhiWuXing.put('戌', "土");
diZhiWuXing.put('亥', "水");
// 初始化地支阴阳属性
diZhiYinYang.put('子', true); // 阳
diZhiYinYang.put('丑', false); // 阴
diZhiYinYang.put('寅', true); // 阳
diZhiYinYang.put('卯', false); // 阴
diZhiYinYang.put('辰', true); // 阳
diZhiYinYang.put('巳', false); // 阴
diZhiYinYang.put('午', true); // 阳
diZhiYinYang.put('未', false); // 阴
diZhiYinYang.put('申', true); // 阳
diZhiYinYang.put('酉', false); // 阴
diZhiYinYang.put('戌', true); // 阳
diZhiYinYang.put('亥', false); // 阴
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入四柱(年柱、月柱、日柱、时柱,用空格分隔,例如:丁亥 壬寅 甲子 丙寅):");
String input = scanner.nextLine();
String[] pillars = input.split(" ");
// 验证输入是否正确
if (pillars.length != 4) {
System.out.println("输入格式错误,请输入四个柱,用空格分隔");
return;
}
for (String pillar : pillars) {
if (pillar.length() != 2) {
System.out.println("输入格式错误,每个柱应该由两个字组成:" + pillar);
return;
}
}
// 获取日干(日柱的天干),作为参照点
char riGan = pillars[2].charAt(0);
System.out.println("\n日干(日主)为:" + riGan);
System.out.println("日干五行:" + tianGanWuXing.get(riGan));
System.out.println("日干阴阳:" + (tianGanYinYang.get(riGan) ? "阳" : "阴"));
// 计算并输出十神及其五行
System.out.println("\n十神分布及五行:");
calculateAndPrintTenGods(pillars, riGan);
scanner.close();
}
/**
* 计算并打印十神及其五行
*/
private static void calculateAndPrintTenGods(String[] pillars, char riGan) {
String riGanWuXing = tianGanWuXing.get(riGan);
boolean riGanYang = tianGanYinYang.get(riGan);
// 遍历四柱中的每个干支
String[] positions = {"年干", "年支", "月干", "月支", "日干", "日支", "时干", "时支"};
int index = 0;
for (String pillar : pillars) {
// 处理天干
char tianGan = pillar.charAt(0);
String wuXing = tianGanWuXing.get(tianGan);
String tenGod = getTenGod(tianGan, true, riGanWuXing, riGanYang);
System.out.println(positions[index++] + "(" + tianGan + "):" + tenGod + ",五行:" + wuXing);
// 处理地支
char diZhi = pillar.charAt(1);
wuXing = diZhiWuXing.get(diZhi);
tenGod = getTenGod(diZhi, false, riGanWuXing, riGanYang);
System.out.println(positions[index++] + "(" + diZhi + "):" + tenGod + ",五行:" + wuXing);
}
}
/**
* 根据干支与日干的关系确定十神
* @param ganZhi 干支字符
* @param isTianGan 是否为天干
* @param riGanWuXing 日干五行
* @param riGanYang 日干是否为阳
* @return 十神名称
*/
private static String getTenGod(char ganZhi, boolean isTianGan, String riGanWuXing, boolean riGanYang) {
// 获取当前干支的五行和阴阳
String wuXing = isTianGan ? tianGanWuXing.get(ganZhi) : diZhiWuXing.get(ganZhi);
boolean yang = isTianGan ? tianGanYinYang.get(ganZhi) : diZhiYinYang.get(ganZhi);
// 日干与当前干支为同一五行
if (wuXing.equals(riGanWuXing)) {
return yang == riGanYang ? "比肩" : "劫财";
}
// 判断五行生克关系
if (isGenerating(wuXing, riGanWuXing)) {
// 生我者为印星
return yang == riGanYang ? "偏印" : "正印";
} else if (isGenerating(riGanWuXing, wuXing)) {
// 我生者为食伤
return yang == riGanYang ? "食神" : "伤官";
} else if (isRestraining(wuXing, riGanWuXing)) {
// 克我者为官杀
return yang == riGanYang ? "七杀" : "正官";
} else if (isRestraining(riGanWuXing, wuXing)) {
// 我克者为财星
return yang == riGanYang ? "偏财" : "正财";
}
return "未知";
}
/**
* 判断五行a是否生五行b (a生b)
*/
private static boolean isGenerating(String a, String b) {
// 相生关系:木生火,火生土,土生金,金生水,水生木
return (a.equals("木") && b.equals("火")) ||
(a.equals("火") && b.equals("土")) ||
(a.equals("土") && b.equals("金")) ||
(a.equals("金") && b.equals("水")) ||
(a.equals("水") && b.equals("木"));
}
/**
* 判断五行a是否克五行b (a克b)
*/
private static boolean isRestraining(String a, String b) {
// 相克关系:木克土,土克水,水克火,火克金,金克木
return (a.equals("木") && b.equals("土")) ||
(a.equals("土") && b.equals("水")) ||
(a.equals("水") && b.equals("火")) ||
(a.equals("火") && b.equals("金")) ||
(a.equals("金") && b.equals("木"));
}
}
请输入四柱(年柱、月柱、日柱、时柱,用空格分隔,例如:丁亥 壬寅 甲子 丙寅):
丁亥 癸卯 甲子 甲戌
日干(日主)为:甲
日干五行:木
日干阴阳:阳
十神分布及五行:
年干(丁):伤官,五行:火
年支(亥):正印,五行:水
月干(癸):正印,五行:水
月支(卯):劫财,五行:木
日干(甲):比肩,五行:木
日支(子):偏印,五行:水
时干(甲):比肩,五行:木
时支(戌):偏财,五行:土
main
方法(流程控制中心)riGan
)—— 十神计算的基准点(“日主”),并打印日干的五行和阴阳属性,为后续分析提供参照。calculateAndPrintTenGods
方法启动十神计算,并将结果输出到控制台。Scanner
,避免资源泄露。calculateAndPrintTenGods
方法(十神计算与输出)作为连接主方法与底层计算的 “桥梁”,负责:
riGanWuXing
)和阴阳(riGanYang
),作为十神判断的基准。positions
数组定义每个干支的位置名称(如 “年干”“月支”),使输出结果更易理解。getTenGod
方法计算对应的十神,并关联其五行属性,最终打印完整信息(如 “年干 (丁):正财,五行:火”)。getTenGod
方法(十神判定核心逻辑)十神计算的 “引擎”,基于以下规则推导十神名称:
isTianGan
),从对应的Map
中提取五行(wuXing
)和阴阳(yang
)。
(注:生克关系的具体逻辑由辅助方法isGenerating
和isRestraining
实现。)
流年指一个人出生后每一年的干支(如 2024 年甲辰、2025 年乙巳),其计算核心是以干支历法为基础,分析当年干支与原命局(四柱)的互动关系,从而推断该年的运势变化。
流年的核心作用是 “动态触发” 原命局的潜在信息,具体通过以下关系实现:
import java.util.*;
// 修改类名,符合Java命名规范(首字母大写)
public class liunian {
// 天干地支基础数据
private static final String[] TIANGAN = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"};
private static final String[] DIZHI = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};
// 天干五行映射
private static final Map<Character, String> TIAN_GAN_WU_XING = new HashMap<>();
// 地支五行映射
private static final Map<Character, String> DI_ZHI_WU_XING = new HashMap<>();
// 天干阴阳(阳为true,阴为false)
private static final Map<Character, Boolean> TIAN_GAN_YINYANG = new HashMap<>();
// 地支阴阳
private static final Map<Character, Boolean> DI_ZHI_YINYANG = new HashMap<>();
static {
// 初始化天干数据
TIAN_GAN_WU_XING.put('甲', "木");
TIAN_GAN_WU_XING.put('乙', "木");
TIAN_GAN_WU_XING.put('丙', "火");
TIAN_GAN_WU_XING.put('丁', "火");
TIAN_GAN_WU_XING.put('戊', "土");
TIAN_GAN_WU_XING.put('己', "土");
TIAN_GAN_WU_XING.put('庚', "金");
TIAN_GAN_WU_XING.put('辛', "金");
TIAN_GAN_WU_XING.put('壬', "水");
TIAN_GAN_WU_XING.put('癸', "水");
TIAN_GAN_YINYANG.put('甲', true);
TIAN_GAN_YINYANG.put('乙', false);
TIAN_GAN_YINYANG.put('丙', true);
TIAN_GAN_YINYANG.put('丁', false);
TIAN_GAN_YINYANG.put('戊', true);
TIAN_GAN_YINYANG.put('己', false);
TIAN_GAN_YINYANG.put('庚', true);
TIAN_GAN_YINYANG.put('辛', false);
TIAN_GAN_YINYANG.put('壬', true);
TIAN_GAN_YINYANG.put('癸', false);
// 初始化地支数据
DI_ZHI_WU_XING.put('子', "水");
DI_ZHI_WU_XING.put('丑', "土");
DI_ZHI_WU_XING.put('寅', "木");
DI_ZHI_WU_XING.put('卯', "木");
DI_ZHI_WU_XING.put('辰', "土");
DI_ZHI_WU_XING.put('巳', "火");
DI_ZHI_WU_XING.put('午', "火");
DI_ZHI_WU_XING.put('未', "土");
DI_ZHI_WU_XING.put('申', "金");
DI_ZHI_WU_XING.put('酉', "金");
DI_ZHI_WU_XING.put('戌', "土");
DI_ZHI_WU_XING.put('亥', "水");
DI_ZHI_YINYANG.put('子', true);
DI_ZHI_YINYANG.put('丑', false);
DI_ZHI_YINYANG.put('寅', true);
DI_ZHI_YINYANG.put('卯', false);
DI_ZHI_YINYANG.put('辰', true);
DI_ZHI_YINYANG.put('巳', false);
DI_ZHI_YINYANG.put('午', true);
DI_ZHI_YINYANG.put('未', false);
DI_ZHI_YINYANG.put('申', true);
DI_ZHI_YINYANG.put('酉', false);
DI_ZHI_YINYANG.put('戌', true);
DI_ZHI_YINYANG.put('亥', false);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 输入四柱
System.out.println("请输入四柱(年柱、月柱、日柱、时柱,空格分隔,如:丁亥 壬寅 甲子 丙寅):");
String input = scanner.nextLine();
// 修复:使用trim()和\\s+处理任意空格分隔
String[] pillars = input.trim().split("\\s+");
if (pillars.length != 4) {
System.out.println("四柱输入错误!");
return;
}
// 输入各干支的十神
Map<String, String> shiShenMap = new HashMap<>();
String[] positions = {"年干", "年支", "月干", "月支", "日干", "日支", "时干", "时支"};
System.out.println("\n请依次输入以下位置的十神(直接输入十神名称):");
for (String pos : positions) {
System.out.print(pos + "(" + getGanZhiByPosition(pillars, pos) + "):");
shiShenMap.put(pos, scanner.nextLine().trim());
}
// 添加:输入各干支的五行属性
Map<String, String> wuXingInputMap = new HashMap<>();
System.out.println("\n请依次输入以下位置的五行(木、火、土、金、水):");
for (String pos : positions) {
System.out.print(pos + "(" + getGanZhiByPosition(pillars, pos) + "):");
wuXingInputMap.put(pos, scanner.nextLine().trim());
}
// 获取日主(日干)信息
char riGan = pillars[2].charAt(0);
String riZhuWuXing = TIAN_GAN_WU_XING.get(riGan);
boolean riZhuYang = TIAN_GAN_YINYANG.get(riGan);
System.out.println("\n日主(日干):" + riGan +
",五行:" + riZhuWuXing +
",阴阳:" + (riZhuYang ? "阳" : "阴"));
// 输入目标年份
System.out.println("\n请输入要查询的流年年份(如:2024):");
int year = scanner.nextInt();
scanner.nextLine(); // 消费换行符
// 1. 计算流年干支
String liuNianGanZhi = getLiuNianGanZhi(year);
System.out.println("\n" + year + "年流年干支:" + liuNianGanZhi);
char lnTianGan = liuNianGanZhi.charAt(0);
char lnDiZhi = liuNianGanZhi.charAt(1);
// 2. 自动计算流年干支的十神和五行
String lnTgWuXing = TIAN_GAN_WU_XING.get(lnTianGan);
String lnTgShiShen = getShiShen(lnTianGan, true, riGan);
String lnDzWuXing = DI_ZHI_WU_XING.get(lnDiZhi);
String lnDzShiShen = getShiShen(lnDiZhi, false, riGan);
System.out.println("流年天干" + lnTianGan + ":十神=" + lnTgShiShen + ",五行=" + lnTgWuXing);
System.out.println("流年地支" + lnDiZhi + ":十神=" + lnDzShiShen + ",五行=" + lnDzWuXing);
// 3. 使用用户输入的五行属性(替换原自动计算五行的代码)
Map<String, String> wuXingMap = wuXingInputMap;
// 4. 显示原命局信息
System.out.println("\n===== 原命局信息 =====");
for (String pos : positions) {
System.out.println(pos + ":" + getGanZhiByPosition(pillars, pos) +
",十神:" + shiShenMap.get(pos) +
",五行:" + wuXingMap.get(pos));
}
// 5. 显示流年信息
System.out.println("\n===== " + year + "年流年信息 =====");
System.out.println("流年干支:" + liuNianGanZhi);
System.out.println("流年天干:" + lnTianGan + ",十神:" + lnTgShiShen + ",五行:" + lnTgWuXing);
System.out.println("流年地支:" + lnDiZhi + ",十神:" + lnDzShiShen + ",五行:" + lnDzWuXing);
// 6. 分析五行生克影响
analyzeWuXingImpact(lnTgWuXing, lnDzWuXing, wuXingMap);
// 7. 分析十神影响
analyzeShiShenImpact(lnTgShiShen, lnDzShiShen, shiShenMap);
// 8. 分析地支刑冲合害
analyzeXingChong(lnDiZhi, pillars);
scanner.close();
}
// 根据位置获取对应的干支
private static String getGanZhiByPosition(String[] pillars, String position) {
switch (position) {
case "年干": return String.valueOf(pillars[0].charAt(0));
case "年支": return String.valueOf(pillars[0].charAt(1));
case "月干": return String.valueOf(pillars[1].charAt(0));
case "月支": return String.valueOf(pillars[1].charAt(1));
case "日干": return String.valueOf(pillars[2].charAt(0));
case "日支": return String.valueOf(pillars[2].charAt(1));
case "时干": return String.valueOf(pillars[3].charAt(0));
case "时支": return String.valueOf(pillars[3].charAt(1));
default: return "";
}
}
// 计算流年干支
private static String getLiuNianGanZhi(int year) {
int offset = (year - 3) % 60;
if (offset < 0) offset += 60;
int tgIndex = offset % 10;
int dzIndex = offset % 12;
return TIANGAN[tgIndex] + DIZHI[dzIndex];
}
// 计算十神
private static String getShiShen(char ganZhi, boolean isTianGan, char riGan) {
String riGanWx = TIAN_GAN_WU_XING.get(riGan);
boolean riGanYang = TIAN_GAN_YINYANG.get(riGan);
String wx = isTianGan ? TIAN_GAN_WU_XING.get(ganZhi) : DI_ZHI_WU_XING.get(ganZhi);
boolean yang = isTianGan ? TIAN_GAN_YINYANG.get(ganZhi) : DI_ZHI_YINYANG.get(ganZhi);
if (wx.equals(riGanWx)) {
return yang == riGanYang ? "比肩" : "劫财";
} else if (isSheng(wx, riGanWx)) {
return yang == riGanYang ? "偏印" : "正印";
} else if (isSheng(riGanWx, wx)) {
return yang == riGanYang ? "食神" : "伤官";
} else if (isKe(wx, riGanWx)) {
return yang == riGanYang ? "七杀" : "正官";
} else if (isKe(riGanWx, wx)) {
return yang == riGanYang ? "偏财" : "正财";
}
return "未知";
}
// 五行相生:a生b
private static boolean isSheng(String a, String b) {
return (a.equals("木") && b.equals("火")) ||
(a.equals("火") && b.equals("土")) ||
(a.equals("土") && b.equals("金")) ||
(a.equals("金") && b.equals("水")) ||
(a.equals("水") && b.equals("木"));
}
// 五行相克:a克b
private static boolean isKe(String a, String b) {
return (a.equals("木") && b.equals("土")) ||
(a.equals("土") && b.equals("水")) ||
(a.equals("水") && b.equals("火")) ||
(a.equals("火") && b.equals("金")) ||
(a.equals("金") && b.equals("木"));
}
// 分析五行生克影响
private static void analyzeWuXingImpact(String lnTgWx, String lnDzWx, Map<String, String> yuanMingWuXing) {
System.out.println("\n===== 五行生克影响分析 =====");
// 五行相生关系
Map<String, String> sheng = new HashMap<>();
sheng.put("木", "火");
sheng.put("火", "土");
sheng.put("土", "金");
sheng.put("金", "水");
sheng.put("水", "木");
// 五行相克关系
Map<String, String> ke = new HashMap<>();
ke.put("木", "土");
ke.put("土", "水");
ke.put("水", "火");
ke.put("火", "金");
ke.put("金", "木");
// 分析流年天干对原命局的影响
for (Map.Entry<String, String> entry : yuanMingWuXing.entrySet()) {
String pos = entry.getKey();
String wx = entry.getValue();
if (sheng.getOrDefault(lnTgWx, "").equals(wx)) {
System.out.println("流年天干五行" + lnTgWx + "生" + pos + "五行" + wx + ",增强其力量");
} else if (ke.getOrDefault(lnTgWx, "").equals(wx)) {
System.out.println("流年天干五行" + lnTgWx + "克" + pos + "五行" + wx + ",削弱其力量");
}
if (sheng.getOrDefault(lnDzWx, "").equals(wx)) {
System.out.println("流年地支五行" + lnDzWx + "生" + pos + "五行" + wx + ",增强其力量");
} else if (ke.getOrDefault(lnDzWx, "").equals(wx)) {
System.out.println("流年地支五行" + lnDzWx + "克" + pos + "五行" + wx + ",削弱其力量");
}
}
}
// 分析十神影响
private static void analyzeShiShenImpact(String lnTgShiShen, String lnDzShiShen, Map<String, String> yuanMingShiShen) {
System.out.println("\n===== 十神影响分析 =====");
// 十神关系简要说明
Map<String, String> shiShenEffect = new HashMap<>();
shiShenEffect.put("比肩", "代表同辈、朋友,可能有合作或竞争");
shiShenEffect.put("劫财", "代表同辈、竞争者,可能有财物损耗");
shiShenEffect.put("食神", "代表才华、福气,利于发挥能力");
shiShenEffect.put("伤官", "代表创新、变动,可能有突破或是非");
shiShenEffect.put("正财", "代表正财、稳定收入,利于财运");
shiShenEffect.put("偏财", "代表偏财、意外之财,可能有额外收入");
shiShenEffect.put("正官", "代表事业、压力,利于职位提升");
shiShenEffect.put("七杀", "代表挑战、机遇,可能有重大变动");
shiShenEffect.put("正印", "代表贵人、庇护,利于学习、获得支持");
shiShenEffect.put("偏印", "代表灵感、研究,利于思考、特殊机遇");
// 流年十神本身的影响
System.out.println("流年天干十神" + lnTgShiShen + ":" + shiShenEffect.getOrDefault(lnTgShiShen, "未知影响"));
System.out.println("流年地支十神" + lnDzShiShen + ":" + shiShenEffect.getOrDefault(lnDzShiShen, "未知影响"));
// 流年十神与原命局十神的互动
for (Map.Entry<String, String> entry : yuanMingShiShen.entrySet()) {
String pos = entry.getKey();
String ss = entry.getValue();
if (lnTgShiShen.equals(ss)) {
System.out.println("流年天干十神与" + pos + "十神相同(" + ss + "),该十神力量增强");
}
if (lnDzShiShen.equals(ss)) {
System.out.println("流年地支十神与" + pos + "十神相同(" + ss + "),该十神力量增强");
}
}
}
// 分析地支刑冲合害
private static void analyzeXingChong(char lnDz, String[] pillars) {
System.out.println("\n===== 地支刑冲合害分析 =====");
// 原命局地支
List<Character> yuanMingDiZhi = new ArrayList<>();
yuanMingDiZhi.add(pillars[0].charAt(1)); // 年支
yuanMingDiZhi.add(pillars[1].charAt(1)); // 月支
yuanMingDiZhi.add(pillars[2].charAt(1)); // 日支
yuanMingDiZhi.add(pillars[3].charAt(1)); // 时支
// 冲的关系
Map<Character, Character> chong = new HashMap<>();
chong.put('子', '午');
chong.put('午', '子');
chong.put('卯', '酉');
chong.put('酉', '卯');
chong.put('寅', '申');
chong.put('申', '寅');
chong.put('巳', '亥');
chong.put('亥', '巳');
chong.put('辰', '戌');
chong.put('戌', '辰');
chong.put('丑', '未');
chong.put('未', '丑');
// 合的关系
Map<Character, Character> he = new HashMap<>();
he.put('子', '丑');
he.put('丑', '子');
he.put('寅', '亥');
he.put('亥', '寅');
he.put('卯', '戌');
he.put('戌', '卯');
he.put('辰', '酉');
he.put('酉', '辰');
he.put('巳', '申');
he.put('申', '巳');
he.put('午', '未');
he.put('未', '午');
for (char dz : yuanMingDiZhi) {
if (chong.containsKey(lnDz) && chong.get(lnDz) == dz) {
System.out.println("流年地支" + lnDz + "与原命局地支" + dz + "相冲,可能有变动、冲突");
}
if (he.containsKey(lnDz) && he.get(lnDz) == dz) {
System.out.println("流年地支" + lnDz + "与原命局地支" + dz + "相合,可能有合作、融合");
}
}
}
}
请输入四柱(年柱、月柱、日柱、时柱,空格分隔,如:丁亥 壬寅 甲子 丙寅):
丁亥 癸卯 甲子 甲戌
请依次输入以下位置的十神(直接输入十神名称):
年干(丁):伤官
年支(亥):正印
月干(癸):正印
月支(卯):劫财
日干(甲):比肩
日支(子):偏印
时干(甲):比肩
时支(戌):偏财
请依次输入以下位置的五行(木、火、土、金、水):
年干(丁):火
年支(亥):水
月干(癸):水
月支(卯):木
日干(甲):木
日支(子):水
时干(甲):木
时支(戌):土
日主(日干):甲,五行:木,阴阳:阳
请输入要查询的流年年份(如:2024):
2025
2025年流年干支:丙午
流年天干丙:十神=食神,五行=火
流年地支午:十神=食神,五行=火
===== 原命局信息 =====
年干:丁,十神:伤官,五行:火
年支:亥,十神:正印,五行:水
月干:癸,十神:正印,五行:水
月支:卯,十神:劫财,五行:木
日干:甲,十神:比肩,五行:木
日支:子,十神:偏印,五行:水
时干:甲,十神:比肩,五行:木
时支:戌,十神:偏财,五行:土
===== 2025年流年信息 =====
流年干支:丙午
流年天干:丙,十神:食神,五行:火
流年地支:午,十神:食神,五行:火
===== 五行生克影响分析 =====
流年天干五行火生时支五行土,增强其力量
流年地支五行火生时支五行土,增强其力量
===== 十神影响分析 =====
流年天干十神食神:代表才华、福气,利于发挥能力
流年地支十神食神:代表才华、福气,利于发挥能力
===== 地支刑冲合害分析 =====
流年地支午与原命局地支子相冲,可能有变动、冲突
main
方法(总流程控制中心)作为程序入口,负责统筹所有流程,核心职责包括:
getLiuNianGanZhi
方法计算目标年份的流年干支(如 2024 年甲辰),并拆解为流年天干和地支。getShiShen
(计算流年十神)、analyzeWuXingImpact
(五行生克分析)、analyzeShiShenImpact
(十神影响分析)、analyzeXingChong
(地支刑冲合害分析),串联各分析模块。getGanZhiByPosition
:根据位置(如 “年干”“月支”)从四柱中提取对应的干支字符(如年柱 “丁亥” 的年干为 “丁”,年支为 “亥”),为输入十神和五行时的位置提示提供支持。getLiuNianGanZhi
:根据目标年份计算流年干支,采用 “(年份 - 3) 取模 60” 的规则(与传统干支纪年法一致),返回如 “甲辰”“丙午” 等结果。getShiShen
:计算流年天干 / 地支相对于日主的十神,基于五行生克(如 “生我为印”“我克为财”)和阴阳属性(同性为偏、异性为正)推导,核心逻辑与十神计算的传统规则一致。analyzeWuXingImpact
:分析流年五行与原命局五行的生克关系。通过预设 “五行相生”(木生火、火生土等)和 “五行相克”(木克土、土克水等)规则,判断流年天干 / 地支五行对原命局各位置五行的 “增强”(生)或 “削弱”(克)作用。analyzeShiShenImpact
:解读流年十神的含义及与原命局十神的互动。预设十神基础含义(如正财主稳定收入、七杀主挑战),并分析流年十神与原命局十神的 “同神增强” 效应(如流年正官与月干正官相同,则正官力量增强)。analyzeXingChong
:分析流年地支与原命局地支的刑冲合害关系。重点处理 “冲”(如子午冲、寅申冲)和 “合”(如子丑合、寅亥合)两种关系,分别对应 “变动冲突” 和 “合作融合” 的解读,符合传统命理中地支互动的核心规则。八字格局是根据月令藏干透出的十神所确立的核心框架,直接影响事业的高低层次:
判断要点:格局成者(喜用有力、忌神受制),事业层次较高,易有大成就;格局败者(喜用被克、忌神无制),事业多波折,需通过后天努力弥补。
格局是原命局(四柱)的核心框架,其计算以月令(月支)为 “提纲”,通过分析月令藏干的透出情况与十神配置,确定命局的核心势能与成败标准。
地支(尤其是月令)通常藏有 1-3 个天干(称为 “藏干”),按力量强弱分为 “本气”(力量最强)、“中气”(次强)、“余气”(最弱),例如:
import java.util.*;
public class geju {
// 天干地支基础数据
private static final String[] TIANGAN = {"甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"};
private static final String[] DIZHI = {"子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"};
// 地支藏干映射 (本气, 中气, 余气)
private static final Map<Character, List<Character>> DIZHI_CANGGAN = new HashMap<>();
// 天干五行映射
private static final Map<Character, String> TIAN_GAN_WU_XING = new HashMap<>();
// 地支五行映射
private static final Map<Character, String> DI_ZHI_WU_XING = new HashMap<>();
// 天干阴阳 (阳为true,阴为false)
private static final Map<Character, Boolean> TIAN_GAN_YINYANG = new HashMap<>();
static {
// 初始化地支藏干
DIZHI_CANGGAN.put('子', Arrays.asList('癸'));
DIZHI_CANGGAN.put('丑', Arrays.asList('己', '辛', '癸'));
DIZHI_CANGGAN.put('寅', Arrays.asList('甲', '丙', '戊'));
DIZHI_CANGGAN.put('卯', Arrays.asList('乙'));
DIZHI_CANGGAN.put('辰', Arrays.asList('戊', '乙', '癸'));
DIZHI_CANGGAN.put('巳', Arrays.asList('丙', '庚', '戊'));
DIZHI_CANGGAN.put('午', Arrays.asList('丁', '己'));
DIZHI_CANGGAN.put('未', Arrays.asList('己', '丁', '乙'));
DIZHI_CANGGAN.put('申', Arrays.asList('庚', '壬', '戊'));
DIZHI_CANGGAN.put('酉', Arrays.asList('辛'));
DIZHI_CANGGAN.put('戌', Arrays.asList('戊', '丁', '辛'));
DIZHI_CANGGAN.put('亥', Arrays.asList('壬', '甲'));
// 初始化天干五行
TIAN_GAN_WU_XING.put('甲', "木");
TIAN_GAN_WU_XING.put('乙', "木");
TIAN_GAN_WU_XING.put('丙', "火");
TIAN_GAN_WU_XING.put('丁', "火");
TIAN_GAN_WU_XING.put('戊', "土");
TIAN_GAN_WU_XING.put('己', "土");
TIAN_GAN_WU_XING.put('庚', "金");
TIAN_GAN_WU_XING.put('辛', "金");
TIAN_GAN_WU_XING.put('壬', "水");
TIAN_GAN_WU_XING.put('癸', "水");
// 初始化地支五行
DI_ZHI_WU_XING.put('子', "水");
DI_ZHI_WU_XING.put('丑', "土");
DI_ZHI_WU_XING.put('寅', "木");
DI_ZHI_WU_XING.put('卯', "木");
DI_ZHI_WU_XING.put('辰', "土");
DI_ZHI_WU_XING.put('巳', "火");
DI_ZHI_WU_XING.put('午', "火");
DI_ZHI_WU_XING.put('未', "土");
DI_ZHI_WU_XING.put('申', "金");
DI_ZHI_WU_XING.put('酉', "金");
DI_ZHI_WU_XING.put('戌', "土");
DI_ZHI_WU_XING.put('亥', "水");
// 初始化天干阴阳
TIAN_GAN_YINYANG.put('甲', true);
TIAN_GAN_YINYANG.put('乙', false);
TIAN_GAN_YINYANG.put('丙', true);
TIAN_GAN_YINYANG.put('丁', false);
TIAN_GAN_YINYANG.put('戊', true);
TIAN_GAN_YINYANG.put('己', false);
TIAN_GAN_YINYANG.put('庚', true);
TIAN_GAN_YINYANG.put('辛', false);
TIAN_GAN_YINYANG.put('壬', true);
TIAN_GAN_YINYANG.put('癸', false);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入八字四柱(年柱、月柱、日柱、时柱,空格分隔,如:甲午 丙寅 辛丑 壬辰):");
String input = scanner.nextLine().trim();
String[] pillars = input.split("\\s+");
if (pillars.length != 4) {
System.out.println("输入错误,请输入四个柱!");
return;
}
// 验证输入格式
for (int i = 0; i < pillars.length; i++) {
if (pillars[i].length() != 2) {
System.out.println("第" + (i+1) + "柱格式错误,应为两个字符!");
return;
}
}
// 提取各柱信息
char[] yearGan = {pillars[0].charAt(0)};
char[] yearZhi = {pillars[0].charAt(1)};
char[] monthGan = {pillars[1].charAt(0)};
char[] monthZhi = {pillars[1].charAt(1)};
char[] dayGan = {pillars[2].charAt(0)};
char[] dayZhi = {pillars[2].charAt(1)};
char[] hourGan = {pillars[3].charAt(0)};
char[] hourZhi = {pillars[3].charAt(1)};
// 收集所有天干
Set<Character> allTiangan = new HashSet<>();
allTiangan.add(yearGan[0]);
allTiangan.add(monthGan[0]);
allTiangan.add(dayGan[0]);
allTiangan.add(hourGan[0]);
// 显示基本信息
System.out.println("\n===== 八字基本信息 =====");
System.out.println("年柱:" + pillars[0] + " 月柱:" + pillars[1] + " 日柱:" + pillars[2] + " 时柱:" + pillars[3]);
System.out.println("日主(日干):" + dayGan[0] + ",五行:" + TIAN_GAN_WU_XING.get(dayGan[0]));
// 分析月令藏干
System.out.println("\n===== 月令分析 =====");
char yueLing = monthZhi[0];
System.out.println("月令为:" + yueLing + ",五行:" + DI_ZHI_WU_XING.get(yueLing));
List<Character> cangGan = DIZHI_CANGGAN.get(yueLing);
System.out.println("月令藏干(本气、中气、余气):" + cangGan);
// 查找透出的藏干
List<Character> touChuGan = new ArrayList<>();
for (Character gan : cangGan) {
if (allTiangan.contains(gan)) {
touChuGan.add(gan);
}
}
if (!touChuGan.isEmpty()) {
System.out.println("透出的藏干:" + touChuGan);
} else {
System.out.println("月令藏干均未透出");
}
// 手动输入十神(替换原自动计算逻辑)
Map<Character, String> shiShenMap = new HashMap<>();
System.out.println("\n请依次输入以下天干的十神(直接输入名称,如:比肩、正官):");
// 按年干、月干、日干、时干顺序输入,明确对应关系
String[] positions = {"年干", "月干", "日干", "时干"};
char[] gans = {yearGan[0], monthGan[0], dayGan[0], hourGan[0]};
for (int i = 0; i < positions.length; i++) {
System.out.print(positions[i] + "(" + gans[i] + "):");
shiShenMap.put(gans[i], scanner.nextLine().trim());
}
// 分析格局(使用用户输入的shiShenMap)
String pattern = analyzePattern(dayGan[0], monthZhi[0], cangGan, touChuGan, shiShenMap);
System.out.println("\n===== 格局分析结果 =====");
System.out.println("此八字格局为:" + pattern);
scanner.close();
}
// 分析格局
private static String analyzePattern(char riGan, char yueLing, List<Character> cangGan,
List<Character> touChuGan, Map<Character, String> shiShenMap) {
// 1. 有透出的藏干,以透出的十神立格
if (!touChuGan.isEmpty()) {
// 优先考虑本气透出
Character bengQi = cangGan.get(0);
if (touChuGan.contains(bengQi)) {
String shiShen = shiShenMap.get(bengQi);
return getPatternName(shiShen) + "格(月令本气透出)";
}
// 没有本气透出则考虑中气或余气
for (int i = 1; i < cangGan.size(); i++) {
Character gan = cangGan.get(i);
if (touChuGan.contains(gan)) {
String shiShen = shiShenMap.get(gan);
return getPatternName(shiShen) + "格(月令" + (i == 1 ? "中气" : "余气") + "透出)";
}
}
}
// 2. 藏干未透出,以月令本气立格
Character benQi = cangGan.get(0);
String benQiWuXing = TIAN_GAN_WU_XING.get(benQi);
String riGanWuXing = TIAN_GAN_WU_XING.get(riGan);
boolean riGanYang = TIAN_GAN_YINYANG.get(riGan);
boolean benQiYang = TIAN_GAN_YINYANG.get(benQi);
String shiShen;
if (benQiWuXing.equals(riGanWuXing)) {
shiShen = benQiYang == riGanYang ? "比肩" : "劫财";
} else if (isSheng(benQiWuXing, riGanWuXing)) {
shiShen = benQiYang == riGanYang ? "偏印" : "正印";
} else if (isSheng(riGanWuXing, benQiWuXing)) {
shiShen = benQiYang == riGanYang ? "食神" : "伤官";
} else if (isKe(benQiWuXing, riGanWuXing)) {
shiShen = benQiYang == riGanYang ? "七杀" : "正官";
} else if (isKe(riGanWuXing, benQiWuXing)) {
shiShen = benQiYang == riGanYang ? "偏财" : "正财";
} else {
return "特殊格局(无法直接判定)";
}
return getPatternName(shiShen) + "格(月令本气未透出)";
}
// 获取格局名称
private static String getPatternName(String shiShen) {
switch (shiShen) {
case "正官": return "正官";
case "七杀": return "七杀";
case "正财": return "正财";
case "偏财": return "偏财";
case "正印": return "正印";
case "偏印": return "偏印";
case "食神": return "食神";
case "伤官": return "伤官";
case "比肩": return "比肩";
case "劫财": return "劫财";
default: return "特殊";
}
}
// 五行相生:a生b
private static boolean isSheng(String a, String b) {
return (a.equals("木") && b.equals("火")) ||
(a.equals("火") && b.equals("土")) ||
(a.equals("土") && b.equals("金")) ||
(a.equals("金") && b.equals("水")) ||
(a.equals("水") && b.equals("木"));
}
// 五行相克:a克b
private static boolean isKe(String a, String b) {
return (a.equals("木") && b.equals("土")) ||
(a.equals("土") && b.equals("水")) ||
(a.equals("水") && b.equals("火")) ||
(a.equals("火") && b.equals("金")) ||
(a.equals("金") && b.equals("木"));
}
}
请输入八字四柱(年柱、月柱、日柱、时柱,空格分隔,如:甲午 丙寅 辛丑 壬辰):
丁亥 癸卯 甲子 甲戌
===== 八字基本信息 =====
年柱:丁亥 月柱:癸卯 日柱:甲子 时柱:甲戌
日主(日干):甲,五行:木
===== 月令分析 =====
月令为:卯,五行:木
月令藏干(本气、中气、余气):[乙]
月令藏干均未透出
请依次输入以下天干的十神(直接输入名称,如:比肩、正官):
年干(丁):伤官
月干(癸):正印
日干(甲):比肩、
时干(甲):比肩
===== 格局分析结果 =====
此八字格局为:劫财格(月令本气未透出)
进程已结束,退出代码为 0
main
方法(流程控制中心)作为程序入口,负责统筹所有分析步骤,核心职责包括:
analyzePattern
方法,传入月令藏干、透出情况及十神映射,最终打印格局分析结果。analyzePattern
(格局推导核心逻辑):
格局分析的核心方法,遵循 “以月令为提纲” 的传统规则,分两步推导格局: getPatternName
(格局名称映射):
将十神名称转换为对应的格局名称(如 “正官”→“正官格”、“食神”→“食神格”),简化格局结果的输出。isSheng
/isKe
(五行生克判断):
辅助方法,判断五行间的相生(如木生火)、相克(如木克土)关系,为十神推导提供生克逻辑基础(如 “生我为印”“我克为财”)。根据上述程序,我们可以得到四柱,五行,十神及对应的五行,流年大运,格局月令,我们可以把结果为给DeepSeek即可得出结果的解读:比如:
四柱:丁亥 癸卯 甲子 甲戌
五行:
木:3
火:1
土:1
金:0
水:3
十神:
日干(日主)为:甲
日干五行:木
日干阴阳:阳
十神分布及五行:
年干(丁):伤官,五行:火
年支(亥):正印,五行:水
月干(癸):正印,五行:水
月支(卯):劫财,五行:木
日干(甲):比肩,五行:木
日支(子):偏印,五行:水
时干(甲):比肩,五行:木
时支(戌):偏财,五行:土
流年:
===== 2025年流年信息 =====
流年干支:丙午
流年天干:丙,十神:食神,五行:火
流年地支:午,十神:食神,五行:火
===== 五行生克影响分析 =====
流年天干五行火生时支五行土,增强其力量
流年地支五行火生时支五行土,增强其力量
===== 十神影响分析 =====
流年天干十神食神:代表才华、福气,利于发挥能力
流年地支十神食神:代表才华、福气,利于发挥能力
===== 地支刑冲合害分析 =====
流年地支午与原命局地支子相冲,可能有变动、冲突
月令:
月令为:卯,五行:木
月令藏干(本气、中气、余气):[乙]
月令藏干均未透出
格局:
劫财格(月令本气未透出)
提示词:
我要根据八字来测算我的事业运,一下是基本信息,请根据这些,给我详细解读:
四柱:丁亥 癸卯 甲子 甲戌
五行:
木:3
火:1
土:1
金:0
水:3
十神:
日干(日主)为:甲
日干五行:木
日干阴阳:阳
十神分布及五行:
年干(丁):伤官,五行:火
年支(亥):正印,五行:水
月干(癸):正印,五行:水
月支(卯):劫财,五行:木
日干(甲):比肩,五行:木
日支(子):偏印,五行:水
时干(甲):比肩,五行:木
时支(戌):偏财,五行:土
流年:
===== 2025年流年信息 =====
流年干支:丙午
流年天干:丙,十神:食神,五行:火
流年地支:午,十神:食神,五行:火
===== 五行生克影响分析 =====
流年天干五行火生时支五行土,增强其力量
流年地支五行火生时支五行土,增强其力量
===== 十神影响分析 =====
流年天干十神食神:代表才华、福气,利于发挥能力
流年地支十神食神:代表才华、福气,利于发挥能力
===== 地支刑冲合害分析 =====
流年地支午与原命局地支子相冲,可能有变动、冲突
月令:
月令为:卯,五行:木
月令藏干(本气、中气、余气):[乙]
月令藏干均未透出
格局:
劫财格(月令本气未透出)
以下是DS的解读:
### **命局核心特点**
1. **日主甲木**:
生于卯月(木旺之春),得月令强根,地支亥卯半合木局,时支戌中藏余气根,天干两甲木比肩相助,日主身强无疑。木主仁、进取心强,但过旺需金修剪,命局缺金(无官杀),自我约束力稍弱。
2. **五行流通**:
- **水木成势**:水(印星)生木(比劫),能量集中于木,需火土调和。
- **火土弱而待用**:年干丁火伤官、时支戌土偏财为用神,但丁火被癸水压制,戌土被卯木合克(卯戌合火不化),用神力量不足,需大运流年引动。
3. **十神配置**:
- **印星过旺**(年支亥、月干癸、日支子):主依赖心重,易思虑过多,需伤官(丁火)泄秀展现才华。
- **比劫林立**(月支卯、时干甲):竞争压力大,合作中易有资源争夺。
- **时支偏财(戌)**:为事业关键点,需通过专业技能(火土)获取财富。
---
### **事业方向建议**
- **用神为火土**:火(食伤)代表创意、技能、表达,土(财星)代表实业、资源整合。适合从事技术、教育、文化创意、贸易或需专业门槛的行业(如互联网、设计、咨询)。
- **规避纯木水行业**:如农林、航海等,易加剧五行失衡。
- **合作需谨慎**:比劫多,合伙易生竞争,宜独立负责核心业务。
---
### **2025年(丙午流年)事业分析**
1. **流年双食神(丙午)**:
- 丙火透干,食神泄秀,才华有展现机会,利提案、创作、技术输出。
- 午火生时支戌土(偏财),收入渠道可能拓宽,但需主动争取(火为虚透,需落地为土)。
2. **子午冲(日支逢冲)**:
- 工作环境或岗位易变动(如团队调整、项目转向),可能引发短暂压力,但冲开子水印星束缚,反能突破保守思维。
- 注意情绪管理(子水为印,冲则心绪波动)。
3. **劫财格逢食神**:
- 竞争力转化为优势,可通过独特技能脱颖而出,避免卷入人际纠纷(比劫暗藏竞争)。
---
### **长期发展建议**
- **补足火土能量**:
增强执行力(火)与务实规划(土),避免理想化。可专注技术深耕,或通过自媒体、线上平台(火属性)扩大影响。
- **借流年引动财星**:
2025年把握丙午火势,推动项目落地,偏财戌土被生旺,可尝试副业或投资。
- **39岁后行土运(未申酉戌)**:
中年土金运助财官,事业积累将迎来质变,前期需扎实铺垫。
---
### **总结**
您命局如**强木待雕琢**,需火(才华)引燃、土(平台)扎根。2025年流年如东风助力,宜主动展示能力,接纳变动为机遇。注意平衡竞争关系,聚焦技术或创意变现,中年后财星得地,事业可步步攀升。
博主也只是略懂皮毛,不可避免文章中会有错误,也恳请大家的批评指正。另外,事在人为,大家仅供娱乐就好,不可盲目的相信。这个系列博主也更新了很多文章,下一期的选题大家可以私信博主或在评论区打出。感谢大家的支持,等博主的技术再精进一点,争取做出完整的小程序或APP,大家尽情期待!
文献参考:《周易》