示例#1
0
        internal void ApplyInput(ICalculatorInput calculatorinput)
        {
            if (!ValidateInput(calculatorinput))
            {
                return;
            }
            var input = InputHistory.LastOrDefault();

            if (input is CalculatorOperator && calculatorinput is CalculatorOperator)
            {
                InputHistory.RemoveAt(InputHistory.Count - 1);
                InputHistory.Add(calculatorinput);
                FireChange("Input");
                return;
            }

            if ((input == null || input is CalculatorOperator) && calculatorinput.Value == ".")
            {
                InputHistory.Add(InputButtons.FirstOrDefault(b => b.Value == "0"));
                InputHistory.Add(calculatorinput);
            }
            else
            {
                InputHistory.Add(calculatorinput);
            }
            CurrentInput = Input.Replace(" ", "").Split(OperatorButtons.Select(b => b.Value).ToArray(), StringSplitOptions.RemoveEmptyEntries).Where(s => !string.IsNullOrEmpty(s)).LastOrDefault();
            FireChange("Input");
            if (calculatorinput is CalculatorOperator)
            {
                CurrentOperator = calculatorinput as CalculatorOperator;
                Calculate();
            }
        }
示例#2
0
        internal bool ValidateInput(ICalculatorInput calculatorinput)
        {
            if (calculatorinput == null)
            {
                return(false);
            }
            var input = InputHistory.LastOrDefault();

            if (input == null && double.Parse(Result) == 0)
            {
                return(calculatorinput is CalculatorValue || calculatorinput == null);
            }
            if (input is CalculatorOperator && ((CalculatorOperator)input).OperatorType == OperatorTypes.Divide)
            {
                return(!(calculatorinput.Value == "0"));
            }
            var last = Input.Replace(" ", "").Split(OperatorButtons.Select(o => o.Value).ToArray(), StringSplitOptions.RemoveEmptyEntries).LastOrDefault();

            if ((last == "0." || last == "0") && (calculatorinput is CalculatorOperator && ((CalculatorOperator)calculatorinput).OperatorType == OperatorTypes.Equals))
            {
                return(false);
            }
            if ((calculatorinput.Value == "." || calculatorinput.Value == "0.") && last != null && last.Contains(".") && !(input is CalculatorOperator))
            {
                return(false);
            }
            return(true);
        }
 public CalculatorDistributor ( )
 {
     this.outputting = new ConsoleOut();
     this.inputting = new ConsoleIn();
 }
 public CalculatorDistributor (ICalculatorOutput outputDirection)
 {
     this.outputting = outputDirection;
     this.inputting = new ConsoleIn();
 }
 public CalculatorDistributor (ICalculatorOutput outputDirection, ICalculatorInput inputDirection)
 {
     this.outputting = outputDirection;
     this.inputting = inputDirection;
 }
示例#6
0
 public void Input(ICalculatorInput input)
 {
     input.ApplyTo(_register);
 }