| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Вопрос про структуру вектора (Vector) |
| Автор: OlegRu 7.12.2005, 16:00 | ||
| Подскажите новичку: может ли Вектор содержать в своих элементах другие векторы? Например так:
Я так понимаю, что A теперь имеет такую структуру: A: [0]-> [1,2] [1]->[5,6,7] А как теперь дописать в А[0] еще один элемент "3" ? Чтобы было [0]-> [1,2,3]. Это я решаю такую "локальную" задачу как парсинг строки с именами переменных и их значениями. Напр. есть динамическая строка (с неизвестным кол.-м переменных): Str="X1=1,3,5;Y=some_text;A2=150;". Я хочу на выходе получить динамический массив (например, Вектор) в виде: A[0][0]-> "X1" <- Var[0] A[0][1]-> "Y" <- Var[1] A[0][2]-> "A2" <- Var[2] A[1][0]-> "1" <- Value[0] A[1][1]-> "3" <- Value[1] A[1][2]-> "5" <- Value[2] A[2][0]-> "some_text" <- Value[0] A[3][0]-> "150" <- Value[0] Сам распарсиватель я написал без проблем, но не знаю как сформировать полученные вектора в один общий динамических многомерный массив с возможностью дописывать новые элементы или изменять старые. Подскажите, пожалуйста, кратенько чисто схему реализации этой задачи именно Векторами. P.S. Эту задачу я решаю на J2ME, а не Java. |
| Автор: Sardar 7.12.2005, 17:25 |
| Да можно, т.к. Vector это обьект и сам хранит обьекты. На счёт парсинга совсем не туда, попробуй регулярными выражениями. Если хочеться собственный парсер, то копать формальные грамматики, конкретно по Xомскому уровня 4 (реги)(по сути простой лексер) тебе достаточно для строки что ты привёл. Если в выражении встречаеться "разбор по смыслу" не с лева на право, а есть приоритеты (скобки в мат. выражении например), то уровнем выше контекстно-свободные грамматики тебе в помощь. Простейшая реализация на автомате с магазином разберёт тебе почти любую твою фантазию |
| Автор: OlegRu 7.12.2005, 18:12 | ||
| To Sardar Спасибо, конечно, за подсказку про рег. выражения, но я буду очень сильно удивлен, если мне скажут, что в J2ME MIDP 2.0 они работают. Всем спасибо за участие. Вот я дописал свою функцию. Если кому надо,- то берите. Смысл заключался в том, что: сервер передал на мобилу набор переменных в виде строки S, которая должна быть, например, такого формата: S="Var1=5,7,3,;Var2=5,8,;Var3=text..text,;". А функция split расщепляет ее по именам и значениям переменных и заносит в вектор V. Если кто делал красивее или компактнее под J2ME - поделитесь, плиз. (хотя эта версия мне нравится
|
| Автор: igon 8.12.2005, 23:45 | ||
| И как ты потом из V определяешь, что, скажем, 8 - это второй параметр для переменной Var2? Вот более компактный вариант
|
| Автор: Sardar 9.12.2005, 00:21 |
| Вкуриваем это: http://www.softcraft.ru/translat/lect/t04-03.shtml а ещё лучше весь курс. Направленый граф/автомат лучше сделать на таблице, где по горизонтали приходят классы символов, а по вертикали текущее состояние. Маленькой табличкой всё порешаешь. Сохранять инфу лучше не в нескольких векторах, а в одном, держа пары ключ=>[значения] в обьектах. Функционально делать будет то же самое, просто код станет короче, логически более верный. |
| Автор: OlegRu 16.12.2005, 11:17 |
| To igon << И как ты потом из V определяешь, что, скажем, 8 - это второй параметр для переменной Var2? Да, согласен с тобой полностью. Можно, но не удобно. И код твоего примера намного проще (без лишних логических переменных). Я оставил как у тебя, только переписал под case-структуру. Теперь если подать на вход строку: "var1=12,56,3,0,11;var2=4,9,2;var3=text;", то получим: V=[ [ var1 , 12 , 56 , 3 , 0 , 11 ] [ var2 , 4 , 9 , 2 ] [ var3 , text ] ] Vector V1=null; V1=(Vector)V.elementAt(0); // Так получаем имя переменной var1: System.out.println(V1.elementAt(0)); // А например так получаем 2-й элемент переменной var1: System.out.println(V1.elementAt(2)); Лично мне так удобно работать. Возник еще такой вопрос: в PHP это так: $str="var1"; $$str; - т.е. применяем "переменную переменной", чтобы объявить любую строку как переменную. Как это же сделать в Java??? Т.е. мне надо, чтобы V1=(Vector)V.elementAt(0); [ var1 , 12 , 56 , 3 , 0 , 11 ] легко преобразовалось в int[] var1 = new int[5]; To Sardar Спасибо за ссылку, этот сайт мне пригодится - уверен! Тема интересная, но пока нет времени вкуривать Хотя раньше занимался автоматами Мили и Мура, диаграммы Вейча-Карно и т.д. |
| Автор: Dancer 16.12.2005, 13:40 | ||
Что-то вроде такого можно. Хотя кажется через ArrayList можно, но например в J2ME его нету, поэтому придётс так
|
| Автор: OlegRu 16.12.2005, 15:57 |
| To Dancer Спасибо, это я знаю. Там похоже только еще надо приведение типов сделать: Integer.parseInt((String)vec.elementAt(i), 10) Хотя я делаю так: Integer.valueOf( (String)vec.elementAt(i) ).intValue(). Интересно, какой код быстрее работает? Но мой вопрос был в другом Пусть есть String str="var_str"; Как создать автоматически переменную String var_str=""; ??? В РНР это называется "переменная переменной": $str="var_str"; $$str; <- тут мы создаем переменную $var_str. Или так нельзя в Java?? |
| Автор: batigoal 16.12.2005, 16:56 |
| Тьфу, блин, топики перепутал Пятница... |
| Автор: igon 17.12.2005, 00:37 |
| Возможно, поможет http://forum.vingrad.ru/index.php?showtopic=73147 |