【问题标题】:Console Calculation [closed]控制台计算[关闭]
【发布时间】:2021-12-22 17:06:51
【问题描述】:

我遇到了问题,我想知道我的代码是否有问题。

代码应执行以下操作

  1. 在终端中执行时,MoveAmountMove 应该最终彼此相等。

  2. A 面应遵循等式 (x*a)/(a+b) 并以正确的值执行。 (x 代表移动,A 和 B 代表它们的透视比)。

  3. 移动 - A 面 = B 面

  4. 移动 = SideA + SideB

不幸的是,它似乎不起作用,我无法获取代码来创建正确的输出。

如果我尝试根据此图 输入我的值,则 A 侧和 B 侧的计算运动返回不正确,并且输出不符合上述所需参数。

如果有人可以给我任何提示,请告诉我。

using System;

namespace Example
{
    class CalculatedMove
    {
        public double Move = 0.0;
        public double SideARatio = 0.0;
        public double SideBRatio = 0.0;


        public CalculatedMove(double SideARatio, double SideBRatio, double Move)
        {
            this.Move = Move;
            this.SideARatio = SideARatio;
            this.SideBRatio = SideBRatio;
            
        }

        public virtual void SideA()
        {
            double SideA = 0.0;
            SideA = (Move * SideARatio) /(SideARatio + SideBRatio);
            Console.WriteLine("Calculated Side A Movement is {00:00.0000}", SideA);
        }

        public void SideB()
        {
            double SideB = 0.0;
            SideB = Move - SideARatio;
            Console.WriteLine("The Calculated Side B Movement is {00:00.0000}", SideB);
        }

        public void MovementAmount()
        {
            double MovementAmount = 0.0;
            MovementAmount = SideARatio + SideBRatio;
            Console.WriteLine("The Calculated Move Amount is {0:00.0000}", MovementAmount);
        }

    }
   

    class Program
    {
        static void Main(string[] args)
        {
            double Move, SideARatio, SideBRatio = 0.0;
            Console.WriteLine("Enter the Move Amount ");
            Move = Double.Parse(Console.ReadLine());
            Console.WriteLine("Side A Ratio");
            SideARatio = Double.Parse(Console.ReadLine());
            Console.WriteLine("Side B Ratio");
            SideBRatio = Double.Parse(Console.ReadLine());
            CalculatedMove objMove = new CalculatedMove(Move, SideARatio,SideBRatio);
            objMove.SideA();
            objMove.SideB();
            objMove.MovementAmount();
            Console.Read();
        }
    }
}

【问题讨论】:

  • 让我跳出来的是调用时的参数顺序……new CalculatedMove(Move, SideARatio,SideBRatio);……? ...构造函数使用了不同的参数顺序...public CalculatedMove(double SideARatio, double SideBRatio, double Move)...这看起来不对...我很确定您想调用构造函数...new CalculatedMove(SideARatio,SideBRatio,Move);
  • 你需要查询的是浮点数计算的准确性。你也可以尝试使用decimal来达到你的目的。
  • 开始调试,如果还是找不到问题,回来提供一些调试信息。

标签: c# algorithm visual-studio


【解决方案1】:

首先,正如JohnG所说,参数顺序错误在调用参数时。

那么在计算SideB时,SideARatio不应该减去,而SideA应该减去。

最后,Move 应该是 SideA+SideB,而不是 SideARatio+SideBRatio

using System;

namespace Example {
    class CalculatedMove {
        private double move =0.0;
        public double Move {
            get { return move; }
            set { move=value; }
        }
        private double sideARatio=0.0;
        public double SideARatio {
            get { return sideARatio; }
            set { sideARatio=value; }
        }

        private double sideBRatio = 0.0;
        public double SideBRatio {
            get { return sideBRatio; }
            set { sideBRatio=value; }
        }

        private double sideA = 0.0;
        public double SideA {
            get { return sideA; }
            set { sideA=value; }
        }
        private double sideB = 0.0;
        public double SideB {
            get { return sideB; }
            set { sideB=value; }
        }
        private double movementAmount = 0.0;
        public double MovementAmount {
            get { return movementAmount; }
            set { MovementAmount=value; }
        }

        public CalculatedMove(double SideARatio, double SideBRatio, double Move) {
        this.move=Move;
        this.sideARatio=SideARatio;
        this.sideBRatio=SideBRatio;
        }

        public virtual void SideAMove() {
        SideA=(Move*SideARatio)/(SideARatio+SideBRatio);
        Console.WriteLine("Calculated Side A Movement is {00:00.0000}", SideA);
        }

        public void SideBMove() {
        SideB=(Move*SideBRatio)/(SideARatio+SideBRatio);
        Console.WriteLine("The Calculated Side B Movement is {00:00.0000}", SideB);
        }

        public void MovementAmountMove() {
        MovementAmount=SideA+SideB;
        Console.WriteLine("The Calculated Move Amount is {0:00.0000}", MovementAmount);
        }
    }

    class Program {
        static void Main(string[] args) {
        double Move, SideARatio, SideBRatio = 0.0;
        Console.WriteLine("Enter the Move Amount ");
        Move=Double.Parse(Console.ReadLine());
        Console.WriteLine("Side A Ratio");
        SideARatio=Double.Parse(Console.ReadLine());
        Console.WriteLine("Side B Ratio");
        SideBRatio=Double.Parse(Console.ReadLine());
        CalculatedMove objMove = new CalculatedMove( SideARatio, SideBRatio,Move);
        objMove.SideAMove();
        objMove.SideBMove();
        objMove.MovementAmountMove();
        Console.Read();
        }
    }
}

输出:

【讨论】:

    【解决方案2】:

    作为 3.Move - SideA = Side B:

      public void SideB()
      {
            double SideB = 0.0;
            SideB = Move - SideARatio; // Here is the problem;
            Console.WriteLine("The Calculated Side B Movement is {00:00.0000}", SideB);
      }
    

    修复 public void SideB()

      public void SideB()
      {
            double SideB = 0.0;
            SideB = (Move * SideBRatio) /(SideARatio + SideBRatio);
            Console.WriteLine("The Calculated Side B Movement is {00:00.0000}", SideB);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-08
      • 2015-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      相关资源
      最近更新 更多