Мы продолжаем создание целого калькулятора для демонстрации использования шаблона проектирования State. На этом уроке мы реализуем переход между состояниями ввода данных.
Чему научился:
Реализовал логику калькулятора. Я нашел две ошибки: 1. если ввести 1 + 1 + 2 в результате получим 14, потому что у нас не обнуляется Y в случае если мы выбрали операцию после второго состояния. 2. Не работает фишка которая есть в калькуляторе если я введу 5 + и равно, он должен складывать 5+5 и при каждом нажатии "=" прибавлять 5.
Научился: Повторил пройденное Тут не одна ошибка в коде, тут их куча!
Что было мной выявлено при тестировании калькулятора:
1 - нужно сбрасывать значение второй переменной в методе StateOpers().opers()
2 - нужно произвести калькуляцию в начале метода StateSecond().opers()
3 - в методе calc() добавил проверку: "Делить на ноль нельзя!"
4 - метод calc() перенёс в класс Context(), так как он вызывается не только в StateResult()
5 - не нужно производить калькуляцию при вводе очередного числа в StateResult()
6 - не нужно производить калькуляцию при вводе операции в StateResult()
7 - нужно делать сброс при вводе числа в StateResult()
8 - оставить ситуацию без изменений, если ввести символ, который не поддерживается
9 - что бы не ввели, брать первый символ
з.ы.
Помимо этого, как видно из скриншота, динамически увеличивается список истории вычислений.
В результате отображается текущая ситуация, что тоже видно на скриншотах.
Обкатал калькулятор, вроде все нюансы учёл, баги больше не встречались.
Научился: Реализовывать основной метод main() в классе Program(), а также методы
show() и press() в классе Context() и метод digit() в классе StateFirst()