Здесь есть две основные проблемы.
Во-первых, ваша функция обработчика событий не меняет значение displayValue
.
Если вы будете следовать логике вашего обработчика событий, вы увидите, что reset
устанавливает displayValue
на 0.0
и setUp
копирует displayValue
на RHS
. Таким образом, RHS
всегда равно 0.0
, и вычисление просто возвращает исходное значение displayValue
, которое было скопировано в LHS
.
Во-вторых, вы используете displayValue
для хранения как пользовательского ввода, так и результата. Поэтому, когда пользователь вводит еще одну цифру, ваш код предполагает, что displayValue
является вводом пользователя, и просто добавляет цифру к номеру, а не начинает новый номер.
Чтобы избежать первой проблемы, было бы лучше сохранить состояние калькулятора в неизменяемой структуре и написать методы, которые генерируют новое состояние на основе старого. Это сделает логику намного легче следовать. Наличие изменяемых структур данных с такими методами, как reset
и setUp
, делает логику трудной для понимания и является довольно нестандартным способом выполнения действий.
Чтобы устранить вторую проблему, вам нужно отслеживать ввод и вывод отдельно или отслеживать состояние калькулятора, чтобы узнать, является ли дисплей вводом или выводом.