You need to enable JavaScript to run this app. Java实现图书价格最值计算时最小值始终输出为0的原因
优惠活动
大模型
产品
解决方案
定价
更多

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

修正方案

针对上述问题做三点调整:

  1. 修正循环边界条件,改为i < books.length,确保遍历数组内所有图书元素
  2. 拆分互斥的判断分支,将最大值、最小值的判断改为两个独立的if逻辑,避免单分支执行后跳过另一部分的更新逻辑
  3. 调整最值初始值的设置逻辑,不要硬编码初始值为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 19:06:04