|
2 / 2 / 1
Регистрация: 18.01.2018
Сообщений: 16
|
||||||
Запрет ввода более 1 точки: в чем ошибка?18.01.2018, 08:58. Показов 3769. Ответов 7
Метки нет (Все метки)
Помогите, пожалуйста, найти ошибку в коде
Задача: запретить вводить более одной точки Цветом выделен проблемный фрагмент кода package Calculator; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; public class CalcEngine implements ActionListener { Calc parent; // ссылка на объект Calc (на окно калькулятора) char selectedAction = ' '; // + - * / double currentResult = 0; // промежуточные значения CalcEngine (Calc parent) { // конструктор сохраняет ссылку на окно калькулятора в переменной // экземлпяра текущего класса this.parent = parent; } @Override public void actionPerformed(ActionEvent e) { JButton clickedButton = (JButton)e.getSource(); // получаем источник события // источнк события был приведен к типу JButton String dispFieldText = parent.displayField.getText(); // получить текст с дисплея калькулятора double displayValue = 0; // переменная для хранения числа с дисплея if (!"".equals(dispFieldText)){// если не пустой if ((-1) != dispFieldText.indexOf('.')) { // если выражение не вернуло -1, // значит, точка есть и нужно выяснить нет ли еще точек int count = 0; for (int i = 0; i < dispFieldText.length(); i++) { if (dispFieldText.charAt(i) == '.'){ count++; } } if (count == 1) { displayValue = Double.parseDouble(dispFieldText); } else { parent.displayField.setText("Ошибка: более одной точки"); } } else { displayValue = Double.parseDouble(dispFieldText); } } Object src = e.getSource(); if (src == parent.buttonPlus) { selectedAction = '+'; currentResult = displayValue; // сохранить введенное число в переменной parent.displayField.setText(""); // очистить окно } else if (src == parent.buttonMinus) { selectedAction = '-'; currentResult = displayValue; parent.displayField.setText(""); } else if (src == parent.buttonDiv) { selectedAction = '/'; currentResult = displayValue; parent.displayField.setText(""); } else if (src == parent.buttonMulti){ selectedAction = '*'; currentResult = displayValue; parent.displayField.setText(""); } else if (src == parent.buttonEqual){ if (selectedAction == '+') { currentResult +=displayValue; parent.displayField.setText(""+currentRe sult); } else if (selectedAction == '-') { currentResult -=displayValue; parent.displayField.setText(""+currentRe sult); } else if (selectedAction == '/') { if (!"".equals(dispFieldText)) { currentResult /=displayValue; parent.displayField.setText(""+currentRe sult); } else if ("".equals(dispFieldText)) { parent.displayField.setText("На ноль делить нельзя!"); } } else if (selectedAction == '*') { currentResult *=displayValue; parent.displayField.setText(""+currentRe sult); } } else { String clickedButtonLabel = clickedButton.getText(); parent.displayField.setText(dispFieldTex t+clickedButtonLabel); } } } Добавлено через 17 минут Прошу прощения, впервые на форуме - код в читабельном виде:
Проблема в том, что не работает код с 30 по 48 строку, в чем здесь может быть причина?
0
|
||||||
| 18.01.2018, 08:58 | |
|
Ответы с готовыми решениями:
7
Интерполяция.Задан список аргументов и значений не более чем из 10 пар. Выдать функцию, проходящую через эти точки Ошибка при загруженности флешки более чем на 50% Как сделать запрет ввода букв в поле для ввода input |
|
85 / 67 / 25
Регистрация: 09.10.2017
Сообщений: 208
|
|
| 18.01.2018, 09:10 | |
|
Здравствуйте!
Есть наверное ещё класс Calc Не могу проверить Ваш код, запустив на выполнение Возможно кто-то просто прочитает код и поймёт в чём дело
0
|
|
|
2 / 2 / 1
Регистрация: 18.01.2018
Сообщений: 16
|
||||||
| 18.01.2018, 09:12 [ТС] | ||||||
|
Здравствуйте
да, есть еще Calc:
0
|
||||||
|
85 / 67 / 25
Регистрация: 09.10.2017
Сообщений: 208
|
||||||||||||||||
| 18.01.2018, 13:49 | ||||||||||||||||
|
Здравствуйте!
Не работает только 42 строка
в этот else заходит и count считает только в текстовое поле текст не добавляет, хотя далее по коду текстовое поле очищает ps каждый раз надо запускать - нет никакого сброса результата Добавлено через 3 часа 0 минут Здравствуйте! Если вместо этой строки присвоить dispFieldText значение
так как у Вас в конце кода идёт вывод информации в текстовое поле:
1
|
||||||||||||||||
|
2 / 2 / 1
Регистрация: 18.01.2018
Сообщений: 16
|
|
| 18.01.2018, 14:21 [ТС] | |
|
Спасибо!
Интересно, все же, почему строка 42 не работает ![]() в отладчике смотрю - действительно, count считает и число это не учитывается в дальнейших расчетах.. но текст почему-то не выводится
0
|
|
|
15 / 15 / 1
Регистрация: 15.01.2018
Сообщений: 42
|
|||||||
| 18.01.2018, 21:47 | |||||||
|
Не по теме:
Попробуйте в таком виде:
Добавлено через 3 минуты Кстати, да, зачем Вам количество точек, просто не давайте юзеру ставить точки на этапе ввода. Почему бы и нет? Тогда можно даже MsgBox допилить. Ведь действительно, зачем проверять ошибки, если их можно выявить сразу...
1
|
|||||||
|
2 / 2 / 1
Регистрация: 18.01.2018
Сообщений: 16
|
||
| 19.01.2018, 20:34 [ТС] | ||
|
Спасибо!
Добавлено через 11 минут я только начинаю изучать Java и пока не представляю как в класс-обработчик передавать по одному символу для проверки вводимых значений. Подскажете, это разумно организовать? Было бы интересно расширить горизонт
0
|
||
|
15 / 15 / 1
Регистрация: 15.01.2018
Сообщений: 42
|
|||||||
| 19.01.2018, 20:54 | |||||||
1
|
|||||||
| 19.01.2018, 20:54 | |
|
Помогаю со студенческими работами здесь
8
Как в VBA в поле Textbox сделать запрет на ввод более одного слова (или запрет на ввод пробелов)? OLE WORD ошибка при открытии более чем 5 файлов. В чем ошибка? Перегрузка оператора ввода\вывода Запрет ввода только минуса в ячейке StringGrid, и запрет на ввод минуса между цифрами ввод данных, ошибка при вводе чисел, более чем 3 миллиарда Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|