java编写周易demo

博主在疫情期间出于兴趣,尝试用Java编程实现周易的卦象组合。文章介绍了八卦的构成,包括阳爻和阴爻,以及八卦的口诀,并展示了使用Java Swing创建的GUI效果,计划后续补充卦象的详细解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

0x00

疫情期间,闲来无事,在家看周易,对于一般人来说,周易的组合不好记住,比如乾卦+坤卦为否挂等,试一试应该可以用程序的实现方式来展现。(此程序为2月份在家无聊编写,写的不好请各位看官勿喷~毕竟不是专业的开发人员)

0x01

首先得了解八卦的构成。
卦象有三爻组成,爻又分为阳爻(—)和阴爻(- -)。还有八卦的口诀“乾三连,坤六断,震仰盂,艮覆碗,离中虚,坎中满,兑上缺,巽下断”。
此图为百度网图,如有侵权请告知,删除
还有就是64卦象,是八卦的两两组合,也有歌诀,但是太长就不写了,回头看代码吧。
ok,到此为止,基本的知识已经了解的差不多了。
使用java 代码,swing画GUI,先看下效果图:
周易 demo

以后有时间在把各个卦象的说明写下。

0x03

贴代码

import javax.swing.*;
import java.awt.*;

public class godwill {
   
    public static void creatGUI(){
   
        Myframe frame = new Myframe("周易 Demo");
        frame.setBounds(((Toolkit.getDefaultToolkit().getScreenSize().width)/2)-300, ((Toolkit.getDefaultToolkit().getScreenSize().height)/2)-300,600,600);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setSize(500,400);
        frame.setVisible(true);
    }

    public static void main(String[] args){
   
        SwingUtilities.invokeLater(new Runnable() {
   
            @Override
            public void run() {
   
                creatGUI();
            }
        });
    }
}

/*@author by pingl
date: 2020年2月
疫情期间闲来无事,研究一下周易八卦,发现可以用计算机的形式解析八卦
乾三连,坤六断,震仰盂,艮覆碗
离中虚,坎中满,兑上缺,巽下断
 */
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentListener;

public class Myframe extends JFrame {
   
    public Myframe(String title){
   
        super(title);

        String[][] hexagrams = {
   
                {
   "乾","履","同人","无妄","姤","讼","遯","否"},
                {
   "夬","兑","革","随","大过","困","咸","萃"},
                {
   "大有","睽","离","噬嗑","鼎","未济","旅","晋"},
                {
   "大壮","归妹","丰","震","恒","解","小过","豫"},
                {
   "小畜","中孚","家人","益","巽","涣","渐","观"},
                {
   "需","节","既济","屯","井","坎","蹇","比"},
                {
   "大畜","损","贲","颐","蛊","蒙","艮","剥"},
                {
   "泰","临","明夷","复","升","师","谦","坤"}};


        //不使用布局器
        Container root = this.getContentPane();
        root.setLayout(null);

       //由于没有布局器,所以默认的,子控件无法显示
        JLabel gua1 = new ColorfulLabel("第一卦",Color.white);
        JLabel name1 = new ColorfulLabel("卦名",Color.white);
        JLabel gau2 = new ColorfulLabel("第二卦",Color.white);
        JLabel name2 = new ColorfulLabel("卦名",Color.white);
        JLabel name3 = new ColorfulLabel("综合挂",Color.white);


        //JTextField[] text = null;
        JTextField textField
<think>好的,用户想用Java实现周易起卦的功能。首先,我需要明确周易起卦的常见方法,比如时间起卦、数字起卦等。根据提供的引用,特别是引用[2]提到的梅花易数的时间起卦,这可能是一个合适的起点。 用户需要示例代码,所以得先确定起卦的具体步骤。时间起卦通常涉及将年月日时的数字相加,然后根据上下卦的算法生成卦象。比如,年月日相加得到上卦,年月日时相加得到下卦,动爻则是总和除以6的余数。 接下来要考虑Java如何实现这些计算。可能需要使用`Calendar`类来获取当前时间,然后提取年、月、日、时的数值。需要注意的是,农历和公历的区别,但用户可能只需要简单的示例,所以暂时用公历时间,并指出可能的局限性。 然后,处理数字。根据周易,数字可能需要取模8得到上卦和下卦,模6得到动爻。这里要确保余数从1开始,因为卦象通常从1到8,所以如果余数为0,应该转换为8或6(对于动爻)。 卦象的映射需要数组或列表来对应八卦。例如,1为乾,2为兑,依此类推。动爻则用1到6的数字表示。 代码结构方面,先获取时间参数,计算总和,再求上卦、下卦和动爻。然后输出结果。可能需要处理时区的问题,但示例中可以简化,使用默认时区。 测试代码时,确保生成的数值在合理范围内,比如上卦和下卦的值在1-8之间,动爻在1-6之间。同时,考虑代码的可读性,添加必要的注释,方便用户理解。 用户可能还想知道如何扩展其他起卦方法,比如数字起卦,所以可以在相关问题中提出。此外,异常处理和农历转换可能是进阶需求,但示例中可以省略,保持代码简洁。 最后,根据引用[1]和[3],可能需要提到数理计算与编程的结合,以及卦象的表示方式,但示例代码可能不需要涉及复杂的数学符号,保持实用性为主。</think>以下是用Java实现周易时间起卦功能的示例代码和说明: ### 一、时间起卦实现步骤 1. **获取当前时间**:取公历年、月、日、时的数字 2. **计算上卦**:$$上卦 = (年 + 月 + 日) \mod 8$$ 3. **计算下卦**:$$下卦 = (年 + 月 + 日 + 时) \mod 8$$ 4. **计算动爻**:$$动爻 = (年 + 月 + 日 + 时) \mod 6$$ (当余数为0时取8或6)[^2] ### 二、Java实现代码 ```java import java.util.Calendar; public class ZhouYiDivination { private static final String[] BA_GUA = { "坤", "震", "坎", "兑", "艮", "离", "巽", "乾" // 先天八卦顺序[^3] }; public static void main(String[] args) { Calendar now = Calendar.getInstance(); int year = now.get(Calendar.YEAR); int month = now.get(Calendar.MONTH) + 1; // 月份从0开始 int day = now.get(Calendar.DAY_OF_MONTH); int hour = now.get(Calendar.HOUR_OF_DAY) + 1; // 子时=1 // 计算卦数 int sumYMD = year + month + day; int upper = (sumYMD % 8 == 0) ? 8 : sumYMD % 8; // 上卦 int lower = ((sumYMD + hour) % 8 == 0) ? 8 : (sumYMD + hour) % 8; // 下卦 int movingYao = ((sumYMD + hour) % 6 == 0) ? 6 : (sumYMD + hour) % 6; // 动爻 System.out.println("时间卦:" + BA_GUA[upper-1] + BA_GUA[lower-1]); System.out.println("动爻:第" + movingYao + "爻"); } } ``` ### 三、关键说明 1. 时间处理采用公历,实际应用需考虑农历转换 2. 八卦数组索引从0开始,故计算结果需减1 3. 子时处理采用`+1`的简化方式,精确实现需考虑时辰划分 4. 示例输出:`时间卦:坎离 动爻:第3爻`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值