Java实现图书价格最值计算时最小值始终输出为0的原因
图书价格最值计算最小值恒为0问题排查
问题场景
Java开发中实现图书价格的最大、最小值统计功能时,出现最大值计算结果正常,但最小值始终输出0的异常。已知存储图书信息的books数组中,各元素对应的价格分别为12000、9000、8500,运行代码后输出与预期偏差较大。
问题代码
public void minMaxBook() { for(int i=0; i<1; i++) { if(highPrice < books[i].price) { highPrice = books[i].price; } else if(minPrice > books[i].price) { minPrice = books[i].price; } } System.out.println("high = " + highPrice + " min = " + minPrice); }
异常成因拆解
- 循环边界设置错误:原代码循环条件为
i<1,循环仅会执行1次,只遍历数组下标为0的第一本图书(对应价格12000),完全不会遍历后续存储9000、8500价格的图书元素 - 最值判断逻辑互斥:代码用
else if串联最大值和最小值的判断分支,两个分支执行逻辑互斥——当第一本图书价格12000大于highPrice的初始值(0)时,会进入if分支完成最大值更新,直接跳过后续else if的最小值判断逻辑,永远不会触发最小值的赋值操作 - 最值初始值设置不合理:
minPrice的默认初始值为0,所有图书价格均为正数,哪怕逻辑走到最小值判断环节,0 > 图书价格的比较条件也永远不成立,无法将实际图书价格赋值给minPrice,最终输出时只会打印初始值0
修正方案
针对上述问题做三点调整:
- 修正循环边界条件,改为
i < books.length,确保遍历数组内所有图书元素 - 拆分互斥的判断分支,将最大值、最小值的判断改为两个独立的
if逻辑,避免单分支执行后跳过另一部分的更新逻辑 - 调整最值初始值的设置逻辑,不要硬编码初始值为0,取数组第一个元素的价格作为最大、最小值的初始值,从根源上避免初始值与实际价格区间不匹配导致的判断失效
修正后可运行代码
public void minMaxBook() { // 增加空值、空数组的边界保护,避免数组越界异常 if (books == null || books.length == 0) { System.out.println("未存储有效图书数据"); return; } // 以数组首元素为最值初始值,替代硬编码的0 int highPrice = books[0].price; int minPrice = books[0].price; // 从第二个元素开始遍历,覆盖全部图书数据 for(int i=1; i<books.length; i++) { // 两个判断相互独立,分别完成最大、最小值的更新 if(highPrice < books[i].price) { highPrice = books[i].price; } if(minPrice > books[i].price) { minPrice = books[i].price; } } System.out.println("high = " + highPrice + " min = " + minPrice); }
内容的提问来源于stack exchange,提问作者banna
相关产品推荐
相关产品推荐

