2011-12-10 37 views
2

入力文字列と照合したい4つの操作の配列があります。文字列の配列と文字列の一致

私の試み:I入力が追加した場合

string[] operations = {"add","sub","mul","div"}; 
string rawInput = Console.ReadLine(); 
string[] inputs = rawInput.Split(delims,StringSplitOptions.RemoveEmptyEntries); 
firstInput = inputs[0].Trim(); 

foreach (string operation in operations) 
{ 
    if (firstInput.Contains(operation)) 
     Console.WriteLine("Valid operation: {0}",operation); 
} 

私が予想したように、これは、サブ、MULまたはDIVをValid operationを印刷します。私は今入力sub、私が手

else 
{ 
    Console.WriteLine("Invalid operation: {0}", firstInput); 
    break; 
} 

場合:

Invalid operation: sub

私が削除した場合

無効な入力のためのメッセージを印刷するには、私はこのような他の条件が含まれていますブレークステートメントと入力sub

Invalid operation: sub 
Valid operation: sub 
Invalid operation: sub 
Invalid operation: sub 

正しいメッセージを得るようにロジックを変更するにはどうすればよいですか?

答えて

2

あなたforeachループ反復し、入力がoperations(つまり、の最初の要素と一致しない場合、それはループから抜け出すますのでので、あなたのロジックが間違っています)。有効な操作が見つかった場合はループから抜け出し、それ以外の場合はスキャンを続行します。ここではいくつかのサンプルコードは次のとおりです。

bool validOperation = false; 
foreach (string operation in operations) 
{ 
    if (firstInput.Contains(operation)) 
    { 
     Console.WriteLine("Valid operation: {0}",operation); 
     validOperation = true; 
     break; 
    } 
} 
if (!validOperation) 
{ 
    Console.WriteLine("Invalid operation: {0}", firstInput); 
} 
+0

ありがとうchess007。私はこの答えが気に入っていて、論理が間違っている理由を私に説明してくれて本当に感謝しています。 – Animesh

3

見て最初の入力ではなく、他の方法で回避(LINQを使用して)の、有効な操作のリストにある場合:

if (operations.Contains(firstInput)) 
{ 
    Console.WriteLine("Valid operation: {0}", firstInput); 
} 
else 
{ 
    Console.WriteLine("Invalid operation: {0}", firstInput); 
} 

リストを反復処理する場合は、あなたが行ったように、これは一つの選択肢であります:operationsの各エントリを超える

bool foundValidOP = false; 
foreach (string operation in operations) 
{ 
    if (firstInput.Equals(operation, StringComparison.InvariantCultureIgnoreCase)) 
    { 
     foundValidOP = true; 
     break; 
    } 
} 

if (foundValidOP) 
{ 
    Console.WriteLine("Valid operation: {0}", firstInput); 
} 
else 
{ 
    Console.WriteLine("Invalid operation: {0}", firstInput); 
} 
+0

おかげオデッド。私は本当にあなたの答えが好きでしたが、現在、少し遅く、基本的な文字列操作で進んでいます。 – Animesh

1

あなたはこれを試すことができます。

string[] operations = { "add", "sub", "mul", "div" }; 
var firstInput = "sudb"; 

var x = operations.SingleOrDefault(o => o == firstInput); 

if (x != null) 
    Console.WriteLine("Valid:" + x); 
else 
    Console.WriteLine("Invalid:" + firstInput);