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

C#中While循环输入-1时错误计入计算的问题求助

解决停车收费程序的循环与计算问题

嘿,很高兴能帮到你!作为C#入门学习者,遇到这种逻辑小问题很正常,咱们一步步来把它捋顺。

问题根源分析

你的代码现在有几个关键逻辑漏洞,导致输入-1时会错误计算费用:

  1. 循环顺序颠倒:当前循环先判断hoursParked != -1再读取输入,这意味着当你输入-1时,程序已经进入了循环体,还是会执行后续的收费计算逻辑(因为进入循环时hoursParked还是上一次的有效值)。
  2. 条件分支嵌套错误:你把hoursParked > 18的判断放在了hoursParked <=18的if块里,这个条件永远不会被触发,逻辑完全矛盾。
  3. 总费用输出时机不对:总费用的打印代码在循环内部,导致每次输入都会输出一次总费用,而不是在所有输入结束后才输出最终结果。

修正后的代码

我保留了你原有的核心逻辑,只调整了关键的循环和判断部分,符合课程当前的要求:

// 先定义费率常量(假设你已经声明了这些变量)
double lessThan3Rate = 2.00; // 2小时内收费2美元
double moreThan18Rate = 10.00; // 超过18小时统一收10美元
double feeCharged = 0;
double totalAllReceipts = 0;
double hoursParked;

// 改用do-while循环:先读取输入,再判断是否退出
do
{
    Console.WriteLine("Enter each customer's total hours parked (no more than 24) or type -1 to quit: ");
    hoursParked = Double.Parse(Console.ReadLine());

    // 先判断是否是退出指令,是的话直接跳过计算
    if (hoursParked == -1)
    {
        break;
    }

    // 修正条件分支:用else if确保区间互斥,逻辑清晰
    if (hoursParked > 0 && hoursParked < 3.0)
    {
        feeCharged = lessThan3Rate;
    }
    else if (hoursParked >= 3.0 && hoursParked <= 18.00)
    {
        // 原公式:2美元基础费 + 超过2小时的部分每小时0.5美元
        feeCharged = 2.00 + ((hoursParked - 2) * 0.50);
    }
    else if (hoursParked > 18.00 && hoursParked <=24.00)
    {
        feeCharged = moreThan18Rate;
    }
    else
    {
        // 处理无效输入(比如0或超过24小时)
        Console.WriteLine("Invalid input! Please enter a number between 0 and 24, or -1 to quit.");
        continue; // 跳过本次循环的后续逻辑,重新输入
    }

    // 只有输入有效时才打印费用并累加总金额
    Console.WriteLine($"The customer's charge is: {feeCharged:C}");
    Console.WriteLine();
    totalAllReceipts += feeCharged;

} while (true); // 内部用break判断退出,循环条件设为true即可

// 循环结束后再打印当日总费用
Console.WriteLine("End of Day Totals:");
Console.WriteLine($"The daily total of all receipts is: {totalAllReceipts:C}");

关键修改说明

  • do-while循环:先执行一次输入操作,再判断是否退出,这样输入-1时会直接跳出循环,不会进入收费计算逻辑。
  • 提前判断退出指令:读取输入后立刻检查是否是-1,是的话直接break,避免后续无效计算。
  • else if分支:确保每个停车时长区间的判断互斥,解决了之前>18嵌套在<=18里的逻辑矛盾。
  • 总费用输出移到循环外:只有当所有输入处理完成、循环结束后,才打印当日总费用,符合业务逻辑。

这样修改后,输入-1就不会再错误计入费用,总金额也能正确累加所有有效输入的费用啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:57:50