Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка корректности операций 
:(
    Опции темы
firsttime
Дата 3.3.2005, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.3.2005

Репутация: нет
Всего: нет



Здравствуйте
Вопрос:
Как можно проверить корректность математических
и логических операций над переменными заданного
типа.
на входе [(int) = (int) + (int)] на выходе [true]
на входе [(int) = (String) + (int)] на выходе [false]
на входе [(String) = (String) + (int)] на выходе [true]
на входе [(String) > (int)] на выходе [false]
на входе [(int) < (int)] на выходе [true]
и т.д.
Может есть какие-нибудь оптимизированные алгоритмы
для того чтобы не перебирать все возможные варианты
со всеми операторами и типами
Буду благодарен за любую информацию.
PM MAIL   Вверх
AntonSaburov
Дата 3.3.2005, 13:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Может проще проверять тип данных. А операции уже оставить на потом.
PM MAIL WWW ICQ   Вверх
firsttime
Дата 3.3.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.3.2005

Репутация: нет
Всего: нет



Как раз это "потом" и интересует. На входе есть типы.
Требуется проверить возможность действия:
"левая часть" оператор "правая часть"
PM MAIL   Вверх
batigoal
Дата 3.3.2005, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



Может, имеет смысл объединить типы в группы (числовые, строковые) и проверять возможность операций для групп?
Или как-нибудь распределить их по уровням.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
AntonSaburov
Дата 3.3.2005, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Цитата(Lamer @ 3.3.2005, 14:40)
Может, имеет смысл объединить типы в группы

Именно это и имелось в виду.
PM MAIL WWW ICQ   Вверх
igon
Дата 4.3.2005, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 30.10.2004

Репутация: 1
Всего: 21



Написать метод, принимающий два СТРОКОВЫХ параметра, именно имена типов. Внутри метода создать два объекта, соответствующих запрошенным типам (выбор из, ИМХО, не очень длинного CASE), и попробовать выполнить 1) математическую операцию (например, сложение) и 2) логическую (например, <). Если возник Exception - вернуть false. Для математики важно именно сложение, поскольку сложение строк (конкатенация) для String допустима, а вычитание или деление - нет. Возможно даже обойтись одной операцией - недопустимость математики означает обычно и недопустимость логики.



--------------------
Хотите поговорить об этом?
PM   Вверх
firsttime
Дата 4.3.2005, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.3.2005

Репутация: нет
Всего: нет



А можно поподробнее. Как выполнить математическую операцию (например, сложение)
двух объектов
<!-- Object = Object1 + Object2
The operator + is undefined for the argument type(s) java.lang.Object, java.lang.Object -->
однако
Или я что-то не понимаю?
PM MAIL   Вверх
Domestic Cat
Дата 4.3.2005, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Цитата(firsttime @ 4.3.2005, 01:26)
Как выполнить математическую операцию (например, сложение)
двух объектов


Никак. Перегружать операторы в Java нельзя.


--------------------

PM   Вверх
firsttime
Дата 4.3.2005, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.3.2005

Репутация: нет
Всего: нет



Так что же делать!!!!????
PM MAIL   Вверх
AntonSaburov
Дата 4.3.2005, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Может объяснишь, что за задача ?
А то какая-то надуманность проблемы настораживает. Ну не помню я за свою практику такой проблемы.
PM MAIL WWW ICQ   Вверх
firsttime
Дата 4.3.2005, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.3.2005

Репутация: нет
Всего: нет



Проблема:
На входе есть исходник к примеру:
[ int a = 5 + "str"; /*Строка 1*/
int b = 5 + 6; /*Строка 2*/ ]
Нужно определить что строка 2 допустима,
а строка 1 - нет
PM MAIL   Вверх
Domestic Cat
Дата 4.3.2005, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Код

public interface Addable
{
     add(Addable a);
     int getValue();
     setValue(int v);
}

public class MyInteger implements Addable
{
     private int x;

     public MyInteger(int value)
     {
           x = value;
     }

     public void add(Addable a)
     {
           x += a.getValue();
     }

     public int getValue()
     {
           return x;
     }

     public void setValue(int value)
     {
           x = value;
     }
}

public class Apple implements Addable
{
     private int radious;

     public Apple (int radious)
     {
           this.radious = radious;
     }

     public void add(Addable a)
     {
           radious += 45454;
     }

     public int getValue()
     {
           return radious;
     }

     public void setValue(int radious)
     {
           this.radious = radious;
     }
}

// ....

Apple a = new Apple();
a.setValue(232);
MyInteger mi = new MyInteger(33);
mi.add(a);


Только вот зачем это все нужно?

Добавлено @ 10:46
Цитата(firsttime @ 4.3.2005, 01:42)
На входе есть исходник к примеру:
[ int a = 5 + "str"; /*Строка 1*/
int b = 5 + 6; /*Строка 2*/ ]
Нужно определить что строка 2 допустима,


Так чего ж ты пишешь что тебе складывать надо???? Парсишь строки, определяешь токены, находишь их "тип", если он разный - строка не подходит.




--------------------

PM   Вверх
firsttime
Дата 4.3.2005, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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]
PM MAIL   Вверх
AntonSaburov
Дата 4.3.2005, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 51
Всего: 118



Если строка распарсена, то каждый токен уже имеет тип (или может иметь). Если у тебя токены одного типа, то операция может быть корректно выполнена, если же есть разные типы, то нет.
PM MAIL WWW ICQ   Вверх
firsttime
Дата 4.3.2005, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.3.2005

Репутация: нет
Всего: нет



(String) (identifier) (=) (int) (+) (string) (;) /* строка5 */
Токены разного типа, однако строка корректна
(string) (>) (string)
Токены одного типа, однако строка некорректна
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1806 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.