最近开始学习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是否除尽,除尽则为8b=(b==0)?8:b;c=(c==0)?6:c;//爻变如果被除尽,则为6System.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.0if((b%2)==0){System.out.println("---"+' ');}else{System.out.println("- -"+' ');}b=b>>1;//b变量移位处理}}}
14:00 完成既定目标,关键其实还是里面的算法。没有使用case语句。30几行就完成了绘制卦的方法。主要把先天八卦图整理成了数字模型。其实周易的八卦你分析起来很有意思,和二进制关系很紧密。比如说1-乾卦。是三条实线。如果我把实线看作二进制里面的1.那么0111代表乾卦。按权展开那代表的数字就是7.。2-兑,是一条缺线,两条实线。用上面的方法就是0110.也就是6.这时候按照数字卦的方法,你会说,不对啊。1乾,2兑。啊。是的。如果算出来的值除以8.然后取绝对值,你会发现,这时侯得到的二进制代码居然就是卦。所以省去了很多的case语句。直接通过位移取余数判断该位置是1是0就可以清晰的绘制出卦。此算法上午古人。也是作为练习结合周易的一点启发。纪念下。
17:30 下班走在路上我有了新的想法,其实可以将乾卦的实线以二进制的0代替,这样就无需减8然后取绝对值了,直接反过来划,取出来的余数直接减1便可。再使用了14节里面提到的三元运算。完美解决当余数为0的时候出的问题。现在已知问题就是输入的类型无法控制,这留到以后解决。
JAVA学习日志 关于周易数字卦的一个算法
最新推荐文章于 2025-01-30 21:16:20 发布