一道有趣的java练手题

我在百度知道上看到了一道求解的Java题 。 原题如下:
一道有趣的java练手题文章插图
题目
这题看着不是很难 , 刚开始简单实现了一下 , 用了很多的if ~ else , 感觉不太好 。 百度了一下 , 发现jdk1.8的lambda表达式 , 提供了Supplier这个函数成功解决了这个问题 。 看一下代码:
//判断三角形形状class Demo2{private static BigDecimal first;private static BigDecimal second;private static BigDecimal third;//构造数据private static void build(BigDecimal first, BigDecimal second, BigDecimal third){Demo2.first = first;Demo2.second = second;Demo2.third = third;}private static List> list = new ArrayList<>();//lambda表达式干掉if-else 并且可配置//顺序很重要 , 这里的顺序是方法执行的顺序static {list.add(Demo2::scaleneTriangle);list.add(Demo2::isoscelesTriangle);list.add(Demo2::rightAngledTriangle);list.add(Demo2::obtuseTriangle);list.add(Demo2::acuteTriangle);}//获取三角形形状static String getTriangle(BigDecimal first, BigDecimal second, BigDecimal third){//数据导入build(first, second, third);//判断是否是三角形if(isTriangle() != null){return isTriangle();}for(Supplier supplier:list){String s = supplier.get(); //执行方法if(s == null){continue;}return s;}return null;}//判断是否是三角形 任意两边之和大于第三边private static String isTriangle(){boolean b = first.add(second).compareTo(third) == 1;boolean b1 = first.add(third).compareTo(second) == 1;boolean b2 = second.add(third).compareTo(first) == 1;if(b}else{return "这不能构成三角形";}}//等边三角形 三边相等private static String scaleneTriangle(){System.out.println("等边三角形方法执行了");boolean b = first.compareTo(third) == 0;boolean b1 = first.compareTo(second) == 0;if(b}return null;}//等腰三角形 任意两边相等private static String isoscelesTriangle(){System.out.println("等腰三角形方法执行了");boolean b = first.compareTo(third) == 0;boolean b1 = first.compareTo(second) == 0;boolean b2 = second.compareTo(first) == 0;if(b || b1 || b2){return "这是一个等腰三角形";}return null;}//直角三角形 任意两边的平方等于第三边的平方private static String rightAngledTriangle(){System.out.println("直角三角形方法执行了");boolean b = first.multiply(first).add(second.multiply(second)).compareTo(third.multiply(third)) == 0;boolean b1 = first.multiply(first).add(third.multiply(third)).compareTo(second.multiply(second)) == 0;boolean b2 = third.multiply(third).add(second.multiply(second)).compareTo(first.multiply(first)) == 0;if(b || b1 || b2){return "这是一个直角三角形";}return null;}//钝角三角形 任意两边的平方小于第三边的平方private static String obtuseTriangle(){System.out.println("钝角三角形方法执行了");boolean b = first.multiply(first).add(second.multiply(second)).compareTo(third.multiply(third)) == -1;boolean b1 = first.multiply(first).add(third.multiply(third)).compareTo(second.multiply(second)) == -1;boolean b2 = third.multiply(third).add(second.multiply(second)).compareTo(first.multiply(first)) == -1;if(b || b1 || b2){return "这是一个钝角三角形";}return null;}//锐角三角形 任意两边的平方大于第三边的平方private static String acuteTriangle(){System.out.println("锐角三角形方法执行了");boolean b = first.multiply(first).add(second.multiply(second)).compareTo(third.multiply(third)) == 1;boolean b1 = first.multiply(first).add(third.multiply(third)).compareTo(second.multiply(second)) == 1;boolean b2 = third.multiply(third).add(second.multiply(second)).compareTo(first.multiply(first)) == 1;if(b || b1 || b2){return "这是一个锐角三角形";}return null;}}


推荐阅读