输入无效三角形边长时代码未输出预期结果,应如何排查修改?
问题根因
你的三角形合法性校验逻辑错误,三角形的三边需要同时满足任意两边之和大于第三边,你当前代码用的是逻辑或||,只要三个条件有一个满足就会进入合法三角形的判断分支。
比如你输入的100、5、7:100+5>7 是成立的,所以逻辑或整体返回true,直接进入了后续的三角形类型判断,最后走到了不等边三角形的分支,不会触发Not a triangle的输出。
修复方案
把判断三角形合法性的逻辑里的||全部替换为逻辑与&&即可,修改后的代码片段如下:
// 把原来的||全部替换为&& if ( (integers[0]+integers[2]>integers[1] && integers[2]+integers[1]>integers[0] && integers[1]+integers[0]>integers[2]) ) { if ( integers[0] == integers[1] && integers[1] == integers[2]) { System.out.println("Triangle is equilateral") ; } else if ( integers[0] == integers[1] || integers[0] == integers[2] || integers[1] == integers[2]) { System.out.println("Triangle is isosceles"); } else { System.out.println("Triangle is scalene"); } } else { System.out.println("Not a triangle"); }
可选优化建议
- 可以先对三边做排序,只需判断较小两边之和大于最大边即可,减少判断条件:
Arrays.sort(integers); if (integers[0] + integers[1] > integers[2]) { // 后续类型判断逻辑 } else { System.out.println("Not a triangle"); }
- 建议新增边长正负数校验,边长为0或负数本身也属于无效三角形。
内容的提问来源于stack exchange,提问作者CopperCleric
相关产品推荐
相关产品推荐

