2017-10-25 8 views
0

私が探しているのは、問題の解決策ではないが、より良いC#ロジックかもしれない。値にconst番号が含まれていないかどうかを確認しますか? 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のコードロジックについては気になりません。

誰かがより良い論理を任意の数学演算で持っていることを願っています!
ありがとうございます。

+0

は、私はあなたが間違って単語*合計*を使用していると思います。今のところ立っているように、あなたの質問は私たちがあなたを助けてくれるかどうかは不明です。 – CodingYoshi

答えて

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/

+0

それは私がビットマスクを使用したことがないので、私が探していたものです。ありがとうございました。 – GAMER

+0

全く問題ありません:) – NDUF

0

元のコードが間違っていて、2番目のifif (value >= 3)の代わりにif (value >= 2)である必要がありますが、それはそのポイントの横にあると思います。私はあなたが達成したいものを理解していれば、このコンソールアプリケーションは助けになるはずです。

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以上かどうかを確認し、存在する場合はvalueをデクリメントし、現在のコンポーネントをsumPartsリスト

ループ内のif内からロジックを呼び出すことができる場合は、sumPartsも必要なく、そこに必要なものを実行してください。

この解決策は基本的にあなたと同じですが、お互いにステートメントの代わりにループに巻き込まれます。

+0

私のコードとほとんど同じですが、ロジックをループに変更したばかりですが、わかりやすいようにこの方法で記述しました。 問題は、最初の段階で値4が存在するかどうかをチェックしていますが、最初に最小値を確認する必要があります。 – GAMER

関連する問題