You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java运费与折扣计算器计算结果错误问题求助

问题分析与修复方案

我帮你梳理下代码里的几个关键问题,这就是为什么测试1件衬衫时结果不对的原因:

1. 括号结构混乱,导致逻辑顺序错误

看你代码里的这段:

if (shirts <=5)
    cost = (int) (shirts*24.95f + 8.00f);
{
    if (shirts <=10)
        cost = (int) (shirts*24.95f + 5.00f);
    if (shirts >=11)
        cost = (int) (shirts*24.95f);
    System.out.print(cost);
}

这里的{}是一个独立的代码块,不管shirts <=5是否成立,里面的两个if都会执行。当你输入1件时,执行完shirts<=5的分支后,马上又进入这个代码块,触发shirts<=10的条件,把之前计算的32.95(转int是32)覆盖成29.95(转int是29),这就是你得到29的直接原因。

2. 第一个if分支的计算逻辑完全错误

if (shirts <=2) { 
    cost = (int) (shirt * cost ); 
}

cost初始值是0,这里用shirt * cost等于0,完全不符合“计算衬衫总价+运费”的逻辑,应该是shirt * shirts加上对应的运费才对。

3. 多个独立的if语句导致条件覆盖

你用了多个独立的if,而不是else if,这会让符合多个条件的情况(比如shirts=1同时满足<=2、<=5、<=10)依次执行所有符合的分支,最后一次的计算结果会覆盖之前的,完全打乱了你的折扣/运费规则。

4. 使用int存储总价丢失精度

cost定义为int,会把所有小数部分直接截断,比如24.95+8=32.95会变成32,这显然不符合实际的价格计算逻辑,应该用float或者double来存储。


修复后的代码

我按照你的需求(订单量对应不同运费/折扣)重新整理了逻辑,假设你的规则是:

  • 购买1-2件:单价24.95,运费8.00
  • 购买3-10件:单价24.95,运费5.00
  • 购买11件及以上:单价24.95,免运费

如果你的折扣规则不同,可以自行调整条件里的计算方式,核心逻辑是对的:

import java.util.Scanner;

public class ShirtOrderCalculator {
    public static void main(String[] args) { 
        Scanner input = new Scanner(System.in); 
        System.out.print("Please enter the number of shirts ordered: "); 
        int shirts = input.nextInt(); 
        // 用double存储总价,避免精度丢失
        double totalCost; 
        final double SHIRT_PRICE = 24.95;
        
        // 使用else if确保只会执行符合条件的第一个分支
        if (shirts <= 2) { 
            totalCost = shirts * SHIRT_PRICE + 8.00; 
        } else if (shirts <= 10) { 
            totalCost = shirts * SHIRT_PRICE + 5.00; 
        } else if (shirts >= 11) { 
            totalCost = shirts * SHIRT_PRICE; 
        } else {
            // 处理输入负数的情况
            System.out.println("Invalid number of shirts!");
            input.close();
            return;
        }
        
        // 保留两位小数输出,符合价格格式
        System.out.printf("Total cost: $%.2f%n", totalCost); 
        input.close();
    } 
}

修复点说明

  • 用else if替代多个独立if,确保每个订单量只会匹配一个规则分支
  • 修正了第一个分支的计算逻辑,用shirts * SHIRT_PRICE计算衬衫总价
  • 把cost改成double类型,保留价格的小数精度,最后用printf格式化输出两位小数
  • 增加了输入负数的异常处理,让程序更健壮
  • 用final定义衬衫单价,方便后续修改维护

现在测试1件衬衫时,会得到Total cost: $32.95,符合24.95+8的计算结果;如果你的预期是24.95(比如免运费?),可以调整第一个分支的运费规则即可。

内容的提问来源于stack exchange,提问作者Patryk Sommer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:43:01