private static void CalculateOperation(string[] args) { OperationType operationType = GetOperationType(args[0]); if (operationType == OperationType.Unknown) { Console.WriteLine("Error parsing the operation (first) parameter. Expected one of these: [-a,-s,-m,-d]\nUse \"help\" as first parameter for more info."); return; } InputParameters inputParams = ParseArguments(args); Calculator calc = new Calculator(inputParams); calc.RunOperation(operationType); }
private List <int> ProcessOperationParameters(string logOpStr, string scrubbedOpParams, InputParameters inputParams) { List <int> opValueList = new List <int>(); string[] rawValues = scrubbedOpParams.Split(','); int upperBound = inputParams.UpperBound.GetValueOrDefault(0); if (rawValues == null || rawValues.Length < 2) { CalcLog.Append($"Invalid parameter for operation. Parameter: {scrubbedOpParams}"); return(null); } int cnt = 0; bool foundNegNum = false; StringBuilder sbNegNum = new StringBuilder(); foreach (string val in rawValues) { if (cnt > 0) { CalcLog.Append(logOpStr); } if (Int32.TryParse(val, out int adInt)) { // check for negative number if (adInt < 0) { if (inputParams.AllowNegativeNumbers) { opValueList.Add(adInt); CalcLog.Append($"{adInt}"); } else { // save the negative number for printing in the exception if (sbNegNum.Length > 0) { sbNegNum.Append(","); } sbNegNum.Append(adInt); foundNegNum = true; } } // set upper bound if one was chosen else if (upperBound > 1) { if (adInt < upperBound) { opValueList.Add(adInt); CalcLog.Append($"{adInt}"); } else { CalcLog.Append("0"); } } else { opValueList.Add(adInt); CalcLog.Append($"{adInt}"); } } else { opValueList.Add(0); CalcLog.Append("0"); } cnt++; } if (foundNegNum) { CalcLog.Append("Negative values found: " + sbNegNum); throw new ArgumentOutOfRangeException("Negative values are not allowed! Set the proper parameter to allow negatives values."); } return(opValueList); }
public Calculator(InputParameters inputParams) { InputParameters = inputParams; CalcLog = new StringBuilder(); }