2016-10-16 7 views
-3
 decimal sum; 
     int index; 

     Console.WriteLine("Enter numbers you want to calculate:"); 
     string Expression = Console.ReadLine(); 

     if (Expression.Contains("+")) 
     { 
      index = Expression.IndexOf("+"); 
      int secondnumber = index + 1; 
      decimal a = decimal.Parse(Expression.Substring(0, index)); 
      decimal b = decimal.Parse(Expression.Substring(secondnumber)); 
      sum = a + b; 
      Console.WriteLine("{0}={1}", Expression, sum.ToString("0.###")); 
     } else if (Expression.Contains("-")) 
     { 
      index = Expression.IndexOf("-"); 
      int secondnumber = index + 1; 
      decimal a = decimal.Parse(Expression.Substring(0, index)); 
      decimal b = decimal.Parse(Expression.Substring(secondnumber)); 
      sum = a - b; 
      Console.WriteLine("{0}={1}", Expression, sum.ToString("0.###")); 
     } else if (Expression.Contains("/")) 
     { 
      index = Expression.IndexOf("/"); 
      int secondnumber = index + 1; 
      decimal a = decimal.Parse(Expression.Substring(0, index)); 
      decimal b = decimal.Parse(Expression.Substring(secondnumber)); 
      sum = a/b; 
      Console.WriteLine("{0}={1}", Expression, sum.ToString("0.###")); 
     } else if (Expression.Contains("*")) 
     { 
      index = Expression.IndexOf("*"); 
      int secondnumber = index + 1; 
      decimal a = decimal.Parse(Expression.Substring(0, index)); 
      decimal b = decimal.Parse(Expression.Substring(secondnumber)); 
      sum = a * b; 
      Console.WriteLine("{0}={1}", Expression, sum.ToString("0.###")); 
     } else 
     { 
      Console.WriteLine("ERROR"); 
     } 

問題は私がコードを単純化することはできません。任意のヘルプが歓迎されるでしょう。私はまた、IfIndexOfメソッドの助けが必要です。私は恋に落ちたが、それはうんざりし続ける。私はこのプログラムを簡素化するのに助けが必要です

+0

あなたの入力は何ですか? –

答えて

2

「のブロックがあれば、」同じパターンに続くすべて以降:1文字

  • 解析左と
  • が実行演算子の右側に10進数、小数点の演算子に

    • スプリットそれらの機能は

    あなたはDictionaryで関数を格納することができ:

    var functionsByOperator = new Dictionary<char, Func<decimal, decimal, decimal>>(); 
    functionsByOperator['+'] = (left, right) => left + right; 
    functionsByOperator['*'] = (left, right) => left * right; 
    // etc 
    

    次に、コードの残りの部分が少なくなりrepetetive:

    // the below array is required for the IndexOfAny method later on 
    char[] operators = new List<char>(functionsByOperator.Keys).ToArray(); 
    
    Console.WriteLine("Enter numbers you want to calculate:"); 
    string Expression = Console.ReadLine(); 
    
    int index = Expression.IndexOfAny(operators); 
    if (index < 0) 
    { 
        Console.WriteLine("ERROR"); 
        return; 
    } 
    
    decimal a = decimal.Parse(Expression.Substring(0, index)); 
    decimal b = decimal.Parse(Expression.Substring(index + 1)); 
    char oper = Expression[index]; 
    decimal sum = functionsByOperator[oper](a, b); 
    Console.WriteLine("{0}={1}", Expression, sum.ToString("0.###")); 
    
  • 関連する問題