Как очистить текст от jtextarea, а затем продолжать добавлять другой текст (с той же кнопкой)? - PullRequest
0 голосов
/ 24 февраля 2019

Я пытаюсь разработать простой калькулятор, в котором, когда пользователь продолжает нажимать на цифры, они появляются в текстовой области.Если они щелкают оператор («+», «-», «*» и т. Д.), Число, которое было в текстовой области, и оператор, которого они щелкают, они сохраняются в числе и переменных оператора соответственно.Когда пользователь щелкает другой номер после щелчка на операторе, он должен удалить номер, который был в jtextarea, и записать на нем новый номер, чтобы я мог сохранить его во второй числовой переменной и, наконец, выполнить операцию с обоиминомера.

Проблема, с которой я сталкиваюсь, заключается в том, что, когда пользователь нажимает число во второй раз, т. Е. После нажатия оператора, я не могу найти способ очистить то, что было в текстовой области, а такжепродолжайте добавлять числа, на которые нажимают.Если я добавлю код для очистки текстовой области и добавлю число, все, что он делает, это очистит предыдущее число и напишет ТОЛЬКО ОДИН НОМЕР , например, если я хотел написать "857", он можетпишите только «8», и если я нажимаю «5», «8» очищается, а «5» пишется.

Я понимаю и понимаю, почему это не работает, потому что коды очистки и дополненияпроисходит каждый раз, когда пользователь нажимает номер.Поэтому я хотел знать, есть ли способ обойти это, а также, если это возможно: очистить текст, а затем продолжать добавлять текст, т. Е. Когда пользователь нажимает цифру второй раз, он должен добавлять число наскрин, не понятно это.

1 Ответ

0 голосов
/ 24 февраля 2019

Я хочу подойти к своему ответу на эту проблему с помощью двух концепций в разработке программ: первая - это зависимость проектирования от внешней функции, а вторая - конечный автомат.

Я делаю некоторые предположенияи предположения здесь, но из вашего описания видно, что вы закрепились на функции «добавления» текстовой области и теперь программируете, так что вы можете использовать ее в нескольких ситуациях: добавление числа к номеру на дисплее,и добавление нового номера на дисплей («добавление» на пустой дисплей).

Это хорошая функция textarea, она может быть полезна для вашей программы, но вам не нужно использовать ее здесь.

Как бы вы ни решили эту проблему, у вас есть «состояние» для сохранения - когда пользователь нажимает клавишу, действие программы зависит от ее состояния.Вы должны быть в состоянии определить, в каком состоянии он находится, чтобы вы могли правильно запрограммировать ответ на нажатие клавиши.

Итак, позвольте мне предложить следующее: иметь переменную, которая хранит то, что вы хотите на дисплее - всеЭто.Когда кто-то нажимает клавишу, каким-либо образом распознайте свое состояние и обновите эту переменную в соответствии с тем, что должно быть на дисплее.Когда вы закончите обработку, установите для текстовой области значение этой переменной.

Обратите внимание, что это позволяет программному потоку - принимать входные данные, обрабатывать, отображать - одинаковые во всех случаях.Ни одна часть программы не должна выяснять, следует ли «очистить» дисплей.Из-за этого в сохраняемом вами состоянии меньше сложности.

Если ваше состояние «накапливает числа для первого операнда», и нажата цифра, вы добавляете нажатую цифру к отображаемой строке..

Если ваше состояние «накапливается ...» и оператор нажимается, добавьте оператор.

Если ваше состояние «оператор только что нажал» и нажата другая цифра, установитепеременная к числу нажатых.

и т. д.

Это могут быть или не быть правильные состояния для использования, я просто приведу их здесь в качестве простых примеров.Но, сделав таким же образом, я думаю, вы обнаружите, что ваша программа становится проще в написании и понимании - вы удаляете код, который взаимодействует между функцией «добавления» и состоянием программы, что делало ваш код более сложным, чем он.я должен был.

Я обнаружил, что программисты (включая меня) очень часто привязываются к какой-то реализации, над которой мы затем работаем - на самом деле, мы всегда работаем над реализациями некоторыхстепень, это то, что мы делаем.Но иногда, если мы сделаем шаг назад, мы увидим, что мы делаем больше программ, работая над некоторыми деталями реализации, которые мы можем устранить, и, устраняя их, мы можем упростить наше решение.

...