![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| firsttime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
Здравствуйте
Вопрос: Как можно проверить корректность математических и логических операций над переменными заданного типа. на входе [(int) = (int) + (int)] на выходе [true] на входе [(int) = (String) + (int)] на выходе [false] на входе [(String) = (String) + (int)] на выходе [true] на входе [(String) > (int)] на выходе [false] на входе [(int) < (int)] на выходе [true] и т.д. Может есть какие-нибудь оптимизированные алгоритмы для того чтобы не перебирать все возможные варианты со всеми операторами и типами Буду благодарен за любую информацию. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Может проще проверять тип данных. А операции уже оставить на потом.
|
|||
|
||||
| firsttime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
Как раз это "потом" и интересует. На входе есть типы.
Требуется проверить возможность действия: "левая часть" оператор "правая часть" |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Может, имеет смысл объединить типы в группы (числовые, строковые) и проверять возможность операций для групп?
Или как-нибудь распределить их по уровням. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Именно это и имелось в виду. |
|||
|
||||
| igon |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 327 Регистрация: 30.10.2004 Репутация: 1 Всего: 21 |
Написать метод, принимающий два СТРОКОВЫХ параметра, именно имена типов. Внутри метода создать два объекта, соответствующих запрошенным типам (выбор из, ИМХО, не очень длинного CASE), и попробовать выполнить 1) математическую операцию (например, сложение) и 2) логическую (например, <). Если возник Exception - вернуть false. Для математики важно именно сложение, поскольку сложение строк (конкатенация) для String допустима, а вычитание или деление - нет. Возможно даже обойтись одной операцией - недопустимость математики означает обычно и недопустимость логики.
-------------------- Хотите поговорить об этом? |
|||
|
||||
| firsttime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
А можно поподробнее. Как выполнить математическую операцию (например, сложение)
двух объектов <!-- Object = Object1 + Object2 The operator + is undefined for the argument type(s) java.lang.Object, java.lang.Object --> однако Или я что-то не понимаю? |
|||
|
||||
| Domestic Cat |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Никак. Перегружать операторы в Java нельзя. -------------------- |
|||
|
||||
| firsttime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
Так что же делать!!!!????
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Может объяснишь, что за задача ?
А то какая-то надуманность проблемы настораживает. Ну не помню я за свою практику такой проблемы. |
|||
|
||||
| firsttime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
Проблема:
На входе есть исходник к примеру: [ int a = 5 + "str"; /*Строка 1*/ int b = 5 + 6; /*Строка 2*/ ] Нужно определить что строка 2 допустима, а строка 1 - нет |
|||
|
||||
| Domestic Cat |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5452 Регистрация: 3.5.2004 Где: Dallas, US Репутация: 50 Всего: 172 |
Только вот зачем это все нужно? Добавлено @ 10:46
Так чего ж ты пишешь что тебе складывать надо???? Парсишь строки, определяешь токены, находишь их "тип", если он разный - строка не подходит. -------------------- |
||||
|
|||||
| firsttime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
Строка отпарсена. Есть очередь событий. Что-то типа:
<!-- (int) (identifier) (=) (int) (+) (string) (;) /* строка1 */ (int) (identifier) (=) (int) (+) (int) (;)/* строка2 */ (int) (==) (int) /* строка3 */ (float) (>=) (String) /* строка4 */ (String) (identifier) (=) (int) (+) (string) (;) /* строка5 */ --> и таких куча разных вариантов (все не переберешь) Нужно получить /* строка1 */ - false /* строка1 */ - true /* строка1 */ - true /* строка1 */ - false /* строка1 */ - true[/color][color=skyblue] |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Если строка распарсена, то каждый токен уже имеет тип (или может иметь). Если у тебя токены одного типа, то операция может быть корректно выполнена, если же есть разные типы, то нет.
|
|||
|
||||
| firsttime |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 3.3.2005 Репутация: нет Всего: нет |
(String) (identifier) (=) (int) (+) (string) (;) /* строка5 */
Токены разного типа, однако строка корректна (string) (>) (string) Токены одного типа, однако строка некорректна |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |