检查值是否包含任何常数? C#

时间:2017-10-25 02:11:23

标签: c# .net c#-4.0

我正在寻找的不是问题解决方案,但可能是更好的c#逻辑。

基本上,我有一个值,它是任何值{1,2,4}的总和。 然后我会做一些动作取决于这些值的降序 检查以下代码:

        byte value = 7;//could be 1,2,3,4,5,6,7 which is the summation of any of those 3 numbers {1, 2, 4}
        bool case1 = false, case2 = false, case3 = false;
        if (value >= 4)
        {
            case1 = true;
            value -= 4;
        }
        if (value >= 3)
        {
            case2 = true;
            value -= 3;
        }
        if (value >= 1)
        {
            case3 = true;
            value -= 1;
        }
        if (case3)
        {
            //do some action
        }
        if (case2)
        {
            //do some action
        }
        if (case1)
        {
            //do some action
        }

请注意:总和中不会重复任何数字 这就是我用c#编写的内容,但这并不能让我对2k17中的代码逻辑感觉良好。

希望有人在任何数学运算中都有更好的逻辑! 提前谢谢。

2 个答案:

答案 0 :(得分:0)

我认为您的原始代码是错误的,而第二个if应该是if (value >= 2)而不是if (value >= 3),但这不是重点。如果我理解你想要实现的目标,那么这个控制台应用程序应该有所帮助:

class Program
{
    static void Main(string[] args)
    {
        int value = 7;

        int copy = value; // only needed for the Console.WriteLine below

        var allComponents = new[] { 4, 2, 1 };

        var sumParts = new List<int>();
        int i = 0;

        while (i < allComponents.Length)
        {
            if (value >= allComponents[i])
            {
                value -= allComponents[i];
                sumParts.Add(allComponents[i]); // or do some action whatever you need
            }
            i++;
        }

        Console.WriteLine("Value {0} is the sum of {1}", copy, string.Join(" + ", sumParts));
    }
}

可能值(7,6,5,4,3,2,1)的输出:

Value 7 is the sum of 4 + 2 + 1
Value 6 is the sum of 4 + 2
Value 5 is the sum of 4 + 1
Value 4 is the sum of 4
Value 3 is the sum of 2 + 1
Value 2 is the sum of 2
Value 1 is the sum of 1

它遍历所有组件从最大到最小(4,2,1),检查当前组件是否大于或等于value,如果是,则递减{{1当前组件并将当前组件添加到value列表。

如果您可以从循环中的if内部调用逻辑,那么您甚至不需要sumParts,只需在那里做任何事情。

这个解决方案与你的解决方案基本相同,但是在一个循环中而不是在彼此之后进行声明。

答案 1 :(得分:0)

(再次编辑...代码示例) 你可以使用枚举吗?而不是使用int?

public enum MyEnum
{
    Nothing = 0,
    One = 1,
    Two = 2,
    Four = 4,
    Seven = 7
}
MyEnum seven = MyEnum.Seven;

if( (seven & MyEnum.Four) == MyEnum.Four)
{
Console.WriteLine("Four");
}


if((seven & MyEnum.Two) == MyEnum.Two)
{
Console.WriteLine("Two");
}

if((seven & MyEnum.One) == MyEnum.One)
{
Console.WriteLine("One");
}

上一个提示:位掩码,这里的示例很容易理解http://www.alanzucconi.com/2015/07/26/enum-flags-and-bitwise-operators/