C#控制台比例移动计算代码输出不符合预期问题求助
代码错误点及修复方案
核心错误梳理
- 构造函数传参顺序不匹配
你定义的CalculatedMove构造函数参数顺序是(SideARatio, SideBRatio, Move),但在Main方法实例化时传入的参数顺序是(Move, SideARatio, SideBRatio),三个参数完全对应错位,直接导致所有计算逻辑的输入值全错。 - SideB计算逻辑错误
当前SideB方法里写的是SideB = Move - SideARatio,不符合要求的Move - SideA规则,错误地用Move减去了A的比例值,而非计算得出的SideA结果。 - MovementAmount方法逻辑错误
要求MoveAmount和Move最终值相等,但当前方法实现是对两个比例值求和,完全不符合需求,该方法应该直接输出Move值,或是计算SideA+SideB的和做校验。 - SideA计算结果未共享
当前SideA是SideA()方法内的局部变量,SideB方法无法获取该值做计算,需要调整为类属性或者让SideA方法返回计算结果。
修复后的完整代码
using System; namespace Example { class CalculatedMove { public double Move = 0.0; public double SideARatio = 0.0; public double SideBRatio = 0.0; // 新增属性存储计算结果 public double SideAValue { get; private set; } public double SideBValue { get; private set; } public CalculatedMove(double sideARatio, double sideBRatio, double move) { Move = move; SideARatio = sideARatio; SideBRatio = sideBRatio; } public virtual void CalculateSideA() { SideAValue = (Move * SideARatio) / (SideARatio + SideBRatio); Console.WriteLine("Calculated Side A Movement is {0:00.0000}", SideAValue); } public void CalculateSideB() { // 按要求用Move - SideA计算 SideBValue = Move - SideAValue; Console.WriteLine("The Calculated Side B Movement is {0:00.0000}", SideBValue); } public void MovementAmount() { // 输出Move值 符合和Move相等的要求,也可以替换为SideAValue + SideBValue做校验,结果完全一致 double movementAmount = Move; Console.WriteLine("The Calculated Move Amount is {0:00.0000}", movementAmount); } } class Program { static void Main(string[] args) { Console.WriteLine("Enter the Move Amount "); double move = Double.Parse(Console.ReadLine()); Console.WriteLine("Side A Ratio"); double sideARatio = Double.Parse(Console.ReadLine()); Console.WriteLine("Side B Ratio"); double sideBRatio = Double.Parse(Console.ReadLine()); // 修正参数顺序 和构造函数定义一致 CalculatedMove objMove = new CalculatedMove(sideARatio, sideBRatio, move); // 注意调用顺序 先算A再算B 再算总移动量 objMove.CalculateSideA(); objMove.CalculateSideB(); objMove.MovementAmount(); Console.Read(); } } }
排查思路
- 先校验输入输出的参数对应关系,打印构造函数内三个字段的赋值结果,就能立刻发现参数传反的问题
- 逐行核对计算逻辑和需求公式的匹配度,很容易就能发现SideB和MovementAmount的计算逻辑错误
- 检查变量作用域,确认需要跨方法共享的计算结果是否有合适的存储载体
内容的提问来源于stack exchange,提问作者Renarldo Mason
相关产品推荐
相关产品推荐

