Комментарии 6
Если это - лабораторная работа - то в принципе вопросов особых нет. Но лучше в самом начале текста сделать дисклеймер типа "это учебная работа, не повторяйте это в реальной жизни". Потому как если относится к этому как к продакшен коду - то вопросов и замечаний тут просто вагон. Но вы и сами поймете все по мере того как будете получать все больше практики и опыта.
Вы правы, это действительно лабораторная работа, расширенная в такой мини-проект)
Спасибо за отзыв, буду работать.
Чисто для начала.
1) if идет со скобкой то с пробелом, то без пробела. За такой "стиль" сразу будут бить.
2) Очень часто берется последний и предпоследний элементы ArrayList. Можно хотя бы сделать новый класс от него и добавить методы getLast и getBeforeLast.
3) Название неверное, так как JavaFX вообще не используется для вычисления выражения.
Ну это у вас мелкие придирки :)
Там чисто с архитектурной точки зрения много всякого: было бы круто сделать лексер, чтобы работать с потоком лексем, а не символов. Это позволило бы не парится подсчетом количества точек, например. Точнее - может и парится, но на другом уровне абстракции. Вообще очень полезно разделять код по разным уровням абстракции. Дикие лестницы из if/else наверное можно было бы заменить таблицей из методов (не знаю, позволяет ли Java вызывать методы по ссылке) или, если лексер будет построен по всем правилам ООП, - то обойтись наследованием и виртуальными методами (хотя, это уже начинает пахнуть фабриками фабрик).
Ну и всякие банальные советы по выносу одинакового кода в общие функции. Типа, если хендлер каждой кнопки выглядит вот так:
public void click6() {
if (text.length() >= 30)
return;
text += "6";
label.setText(text);
}
То это "фу". Надо сделать вспомогательный метод и дергать его:
public void append_display(string ch) {
if (text.length() >= 30)
return;
text += ch;
label.setText(text);
}
public void click6() {
append_display("6");
}
Кода станет меньше, а с ним - и будет меньше потенциальных ошибок. Можно пойти еще дальше и вообще не писать отдельный хендлер на каждую кнопку. Большинство UI тулкитов позволяют назначать один хендлер на кучу кнопок и там внутри уже определять что было нажато. Надеюсь, JavaFX тоже так может.
Ну и за стилем кода тоже надо следить, конечно же...
Ну это скорей косметика. Намного хуже, что код — лапша, его надо бы как минимум разбить на несколько функций и удалить дублирование.
Алгоритм оценки математического выражения с использованием JavaFX