关于c#:计算具有三元组的方法中的计算步骤


Count computation steps in a method with ternaries

我正在寻找一种计算步骤数量的方法:

1
2
3
4
5
6
7
public static int Calculate0(int end, int init, int lim, int bon)
{
    return end <= 0
        ? 0

        : Math.Min(2 * lim, bon == 0 ? init : init + (2 * bon - lim / bon) * end);
}

我想我的问题有两个方面:

  • 我不明白C和
  • 我不知道在哪里输入某种变量到Calculate0方法中。
  • 我一直试图通过微软的指南来阅读关于:?运营商的信息,但我仍然很难理解Calculate0内部的情况。

    我的代码当前看起来像这样。这是正确的吗?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    using System;

    namespace TestProject {
        internal class Program
        {
            private int calc0Steps = 0;

            public static void Main() {

                var calc0 = Program.Calculate0(1, 0, 1, 2);
                Console.WriteLine("Calculate: {0} | Steps: {1}", calc, calc0Steps);

            }

            public static int Calculate0(int end, int init, int lim, int bon)
            {
                return end <= 0
                    ? 0

                    : calc0Steps; Math.Min(2 * lim, bon == 0 ? init : init + (2 * bon - lim / bon) * end);
            }
        }
    }

    更新

    我很抱歉弄混了。我试着缩小范围:我怎么能在Calculate0里放一个计数器呢?

    我的任务的主要范围是对提供的fhcimolin方法进行全面的测试覆盖,并将此方法与Calculate0进行比较。一个小的次要任务是计算计算步骤。但我一开始不知道如何在Calculate0中实现计数器。

    我有另一个版本的Calculate0,看起来像fhcimolin的答案,我可以把它放在一个柜台里。我需要计算两个步骤中有多少个计算步骤。


    如果您的逻辑正确,您可能希望您的Calculate0方法如下:

    1
    2
    3
    4
    public static int Calculate0(int end, int init, int lim, int bon)
    {
        return end <= 0 ? calc0Steps : Math.Min(2 * lim, bon == 0 ? init : init + (2 * bon - lim / bon) * end);
    }

    相当于:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    public static int Calculate0(int end, int init, int lim, int bon)
    {
        if (end <= 0)
        {
            return calc0Steps;
        }
        else
        {
            int aux;

            if (bon == 0) {
                aux = init;
            }
            else
            {
                aux = init + (2 * bon - lim / bon) * end;
            }

            return Math.Min(2 * lim, aux);
        }
    }