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

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();
        }
    }
}

排查思路

  1. 先校验输入输出的参数对应关系,打印构造函数内三个字段的赋值结果,就能立刻发现参数传反的问题
  2. 逐行核对计算逻辑和需求公式的匹配度,很容易就能发现SideB和MovementAmount的计算逻辑错误
  3. 检查变量作用域,确认需要跨方法共享的计算结果是否有合适的存储载体

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:24:04