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

控制流实验代码报错finalPrice未定义,请求排查修正

问题

我正在进行一项控制流实验,编写包裹运费计算代码时无法正常运行,持续报错‘finalPrice is not defined’,我认为遗漏了一些简单细节。

实验要求

编写代码实现以下包裹定价规则:

  1. 包裹重量小于3lbs时,运费为5美元;否则按每磅1.79美元计费。
  2. 若寄件人拥有Brooklyn Shipping Solutions会员资格,重量小于10lbs的包裹享10%折扣,其他包裹享12%折扣。
  3. 无论是否为会员,节假日配送需额外增加5美元。

计算完成后需通过console.log()打印包含寄件人姓名、最终价格、包裹描述的收据;若packageDescription或packageSender为空,需打印‘A package description and sender is required!’。

我的代码

// Leave these values the same throughout.
const minimumPriceInCents = 500;
const priceInCentsPerPound = 179;

// Change the values of these variables to test out your code.
const packageDescription = 'Box';
const packageSender = 'Jimmy';
const packageWeightInPounds = 2;
const hasMembership = false;
const isHolidayDelivery = false;

// Write your algorithm below!

let shippingCost = (packageWeightInPounds * priceInCentsPerPound) / 100;

let minimumPriceInDollars = minimumPriceInCents / 100;

let finalPrice = 0;

if (
    isHolidayDelivery === true &&
    hasMembership === true &&
    packageWeightInPounds < 3
) {
    let finalPrice = (minimumPriceInDollars * 0.9 + 5);
    console.log(`${packageSender} - $${finaPrice}`);
    console.log(`Package Description: ${packageDescription}`);
} else if (
    isHolidayDelivery === true &&
    hasMembership === true &&
    packageWeightInPounds >= 10
) {
    finalPrice = (minimumPriceInDollars * 0.88 + 5);
    console.log(`${packageSender} - $${finaPrice}`);
    console.log(`Package Description: ${packageDescription}`);
} else if (
    isHolidayDelivery === false &&
    hasMembership === true &&
    packageWeightInPounds >= 10
) {
    finalPrice = (minimumPriceInDollars * 0.88);
    console.log(`${packageSender} - $${finaPrice}`);
    console.log(`Package Description: ${packageDescription}`);
}
if (
    isHolidayDelivery === false &&
    hasMembership === true &&
    packageWeightInPounds < 3
) {
    finalPrice = (minimumPriceInDollars * 0.9);
    console.log(`${packageSender} - $${finaPrice}`);
    console.log(`Package Description: ${packageDescription}`);
} else if (
    isHolidayDelivery === false &&
    hasMembership === false &&
    packageWeightInPounds < 3
) {
    finalPrice = (minimumPriceInDollars);
    console.log(`${packageSender} - $${finaPrice}`);
    console.log(`Package Description: ${packageDescription}`);
} else if (
    isHolidayDelivery === true &&
    hasMembership === false &&
    packageWeightInPounds < 3
) {
    finalPrice = (minimumPriceInDollars + 5);
    console.log(`${packageSender} - $${finaPrice}`);
    console.log(`Package Description: ${packageDescription}`);
} else if (isHolidayDelivery === false && hasMembership === false) {
    finalPrice = (minimumPriceInDollars);
    console.log(`${packageSender} - $${finaPrice}`);
    console.log(`Package Description: ${packageDescription}`);
} else console.log('A package description and sender is required!');
问题排查与修复

核心问题分析

  1. 拼写错误:多处将finalPrice误写为finaPrice,这是直接触发finalPrice is not defined报错的原因之一。
  2. 变量重复声明:第一个if块内使用let finalPrice重新声明局部变量,覆盖了外层的finalPrice,导致该分支内的变量无法被外部逻辑访问。
  3. 逻辑分支覆盖不全:
    • 未处理重量在3-10磅之间的场景(如5磅包裹),原代码会错误触发最后的必填项提示。
    • 未优先校验packageDescription或packageSender为空的情况,逻辑顺序错误。
  4. 运费计算逻辑错误:定义了shippingCost但未实际使用,所有场景都固定用5美元基础运费,违反了“重量≥3lbs时按每磅1.79美元计费”的规则。

修复后的代码

// Leave these values the same throughout.
const minimumPriceInCents = 500;
const priceInCentsPerPound = 179;

// Change the values of these variables to test out your code.
const packageDescription = 'Box';
const packageSender = 'Jimmy';
const packageWeightInPounds = 2;
const hasMembership = false;
const isHolidayDelivery = false;

// Write your algorithm below!
let finalPrice = 0;

// Step 1: Validate required fields first
if (!packageDescription || !packageSender) {
    console.log('A package description and sender is required!');
} else {
    // Step 2: Calculate base shipping cost
    let baseCost;
    if (packageWeightInPounds < 3) {
        baseCost = minimumPriceInCents / 100;
    } else {
        baseCost = (packageWeightInPounds * priceInCentsPerPound) / 100;
    }

    // Step 3: Apply membership discount if applicable
    if (hasMembership) {
        if (packageWeightInPounds < 10) {
            baseCost *= 0.9; // 10% discount
        } else {
            baseCost *= 0.88; // 12% discount
        }
    }

    // Step 4: Add holiday delivery surcharge
    if (isHolidayDelivery) {
        baseCost += 5;
    }

    // Step 5: Round to 2 decimal places for currency format
    finalPrice = Math.round(baseCost * 100) / 100;

    // Step 6: Print receipt
    console.log(`${packageSender} - $${finalPrice.toFixed(2)}`);
    console.log(`Package Description: ${packageDescription}`);
}

修复说明

  1. 优先校验必填项:将packageDescription和packageSender的空值检查放在最前面,符合业务逻辑顺序。
  2. 模块化计算逻辑:拆分基础运费计算、会员折扣、节假日附加费三个步骤,代码更易读且逻辑清晰。
  3. 修复拼写与变量问题:删除局部变量重复声明,修正finaPrice拼写错误。
  4. 完善场景覆盖:处理了所有重量区间(<3、3-10、≥10)的情况,完全符合实验规则。
  5. 货币格式化:使用toFixed(2)确保价格以两位小数的标准货币格式输出。

内容的提问来源于stack exchange,提问作者Mark Robertson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:50:27