2016-10-16 4 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"); 
     } 

Das Problem ist, dass ich den Code nicht vereinfachen kann, ohne es zu vermasseln und es wirft Ausnahmen. Jede Hilfe würde geschätzt werden. Ich brauche auch Hilfe mit der .IndexOf-Methode gibt es sowieso außerhalb der if-Auswahl zu tun? Ich habe es versucht, aber es macht weiter durcheinander.Ich brauche Hilfe, dieses Programm zu vereinfachen

+0

Was Ihre Eingabe ist? –

Antwort

2

Da alle „wenn Blöcke“ nach dem gleichen Muster:

  • Split auf Betreiber von 1 Zeichen
  • Analysieren Sie die Dezimalzahl auf der linken Seite und die Dezimalstelle auf der rechten Seite des Bedieners
  • Perform eine Funktion auf ihnen

Sie können die Funktionen speichern in einem Dictionary:

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

wird dann der Rest des Codes weniger fad:

// 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.###")); 
Verwandte Themen