一道有趣的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;}}
推荐阅读
- 计算机专业大一下学期,该选择学习Java还是Python
- 未来想进入AI领域,该学习Python还是Java大数据开发
- 学习大数据是否需要学习JavaEE
- 从事Java开发时发现基础差,是否应该选择辞职自学一段时间
- 2021年Java和Python的应用趋势会有什么变化?
- 普通大学计算机专业的本科生,该选择主攻前端还是Java
- Java语言会不会随着容器的兴起而衰落
- 大一有考研计算机专业的打算,该学习C++还是Java
- 计算机专业的同学在掌握了Java之后,还可以学习哪门后端语言
- 不实习,如何增加Java项目经验