Java实现数字数组升序排列及最大最小值输出的代码逻辑错误排查
冒泡排序逻辑错误定位
核心错误点
- 多余分号导致if判断完全失效
你代码里写的排序判断行是:
行末多余的分号会被Java编译器解析为if语句的空执行分支,也就是说:if条件本身没有关联任何后续的交换逻辑。紧随其后的大括号包裹的相邻元素交换代码,是完全独立于if判断的语句块,不管两个相邻元素的大小关系如何,每一次内层循环都会强制执行相邻交换。if(list[j]>list[j+1]);
按照这个无差别交换的流程跑完,最终得到的数组刚好就是你实际输出的[3,1,4,5,2],和运行结果完全吻合。正常逻辑应该是仅当前置元素大于后置元素时才交换,现在变成了无差别逐次交换相邻元素,冒泡排序完全失效,得不到正确的升序结果。
衍生的异常输出原因
- 你后续取
list[0]作为最小值、list[4]作为最大值的逻辑,是建立在“数组已经完成升序排列”的前提上的。现在数组是无差别交换出来的乱序结果,自然会输出「min为3、max为2」的错误结果。 - 数组求和的逻辑没有受到该错误的影响:因为求和是遍历所有元素累加值,和数组顺序无关,所以计算得到的总和15是正确的。
修复方式
只需要删除if判断行末尾的多余分号即可。修复后冒泡排序会正常完成升序排列,最终得到数组[1,2,3,4,5],此时取首元素为最小值1、尾元素为最大值5,完全符合预期。
内容的提问来源于stack exchange,提问作者ashley stark
相关产品推荐
相关产品推荐

