JAVA学习日志 关于周易数字卦的一个算法

最近开始学习JAVA语言。昨天一天看了尚学堂的视频。13集。学的比较浅,第一个拿来练手的程序就用周易吧。因为经常占卜数字卦,所以利用这个方法写了个简短的程序。设计初期,希望实现输入三个数字,能算出上卦下卦,和变爻。并且画出卦象。
import java.util.*;//一个关于周易测算的程序
public class ZhouYi{
public static void main(String[] args){
Scanner input=new Scanner(System.in);  //建立输入对象
System.out.println("input one:");  //输入第一个想到的数字;
String num_1=input.nextLine();
System.out.println("input two:");
String num_2=input.nextLine();
System.out.println("input three:");
String num_3=input.nextLine();
int a,b,c;//定义运算结果变量
a=Integer.parseInt(num_1)%8;
b=Integer.parseInt(num_2)%8;
c=Integer.parseInt(num_3)%6;//通过输入的数字,取余数
a=(a==0)?8:a;//采用三元运算符。判断a是否除尽,除尽则为8
b=(b==0)?8:b;
c=(c==0)?6:c;//爻变如果被除尽,则为6
System.out.println("1-乾 2-兑 3-离 4-震 5-巽 6-坎 7-艮 8-坤");
System.out.println("运算结果为:");
System.out.println("下挂是:"+a);
System.out.println("上卦是:"+b);
System.out.println("变爻是:"+c);
a=a-1; //对应7-乾 6-兑 5-离 4-震 3-巽 2-坎 1-艮 0-坤
b=b-1;
for (int i=1;i<=3;i++){  //运行三次
if((a%2)==0){
System.out.print("---"+' ');
}else{
System.out.print("- -"+' ');
}
a=a>>1;//a变量移位处理,以判断第二三位1.0
if((b%2)==0){
System.out.println("---"+' ');
}else{
System.out.println("- -"+' ');
}
b=b>>1;//b变量移位处理
}
}
}

JAVA学习日志 关于周易数字卦的一个算法_第1张图片

14:00 完成既定目标,关键其实还是里面的算法。没有使用case语句。30几行就完成了绘制卦的方法。主要把先天八卦图整理成了数字模型。其实周易的八卦你分析起来很有意思,和二进制关系很紧密。比如说1-乾卦。是三条实线。如果我把实线看作二进制里面的1.那么0111代表乾卦。按权展开那代表的数字就是7.。2-兑,是一条缺线,两条实线。用上面的方法就是0110.也就是6.这时候按照数字卦的方法,你会说,不对啊。1乾,2兑。啊。是的。如果算出来的值除以8.然后取绝对值,你会发现,这时侯得到的二进制代码居然就是卦。所以省去了很多的case语句。直接通过位移取余数判断该位置是1是0就可以清晰的绘制出卦。此算法上午古人。也是作为练习结合周易的一点启发。纪念下。

17:30  下班走在路上我有了新的想法,其实可以将乾卦的实线以二进制的0代替,这样就无需减8然后取绝对值了,直接反过来划,取出来的余数直接减1便可。再使用了14节里面提到的三元运算。完美解决当余数为0的时候出的问题。现在已知问题就是输入的类型无法控制,这留到以后解决。




周易数字卦的占法

1、心中对某事有所疑惑,此时“随机”想到三组三位数字,随手写下来。

2、第一组三位数以8除之,视其余数,可形成下卦(若除尽,则余数为8)。第二组三位数以8除之,视其余数,可形成上卦(若除尽,则余数为8)。第三组三位数以6除之,视其余数,即是变爻(若除尽,则余数为6)。

3、前两组的余数所针对的是先天八卦的数字:乾1,兑2,离3,震4,巽5,坎6,艮7,坤8。

4、确定为某卦之后,再看变爻何在,即可进行解卦。

占卦“三不占”原则:   ①不诚不占:不诚则自身感应力不强,所以占卦首重真诚;   ②不义不占:不合乎正当性及合理性的问题,不必占问;   ③不疑不占:必须是理性难以测度之事。 

你可能感兴趣的:(JAVA学习日志 关于周易数字卦的一个算法)