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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> куда записать переменные с типами? в какую структуру данных? 
V
    Опции темы
ElKa
Дата 17.7.2008, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нужно все переменные из кода вместе с типами куда-нибудь записать.. т. е. пары должны записываться 
что лучше для этого подходит? 
PM   Вверх
Dims
Дата 17.7.2008, 18:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Любая Collection, например, Vector. Они туда лягут в виде Object. Имея переменную типа Object, её точный тип всегда можно определить при помощи getClass()
PM MAIL   Вверх
Samotnik
Дата 17.7.2008, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Цитата(Dims @  17.7.2008,  18:59 Найти цитируемый пост)
Они туда лягут в виде Object.

ну не обязательно, можно привести к своему типу
Код

Vector<Integer> objects = new Vector<Integer>();



PM MAIL   Вверх
garbuz
Дата 17.7.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ElKa @  17.7.2008,  16:52 Найти цитируемый пост)
нужно все переменные из кода вместе с типами куда-нибудь записать.. т. е. пары должны записываться 
что лучше для этого подходит?  

Может лучше HashMap. Как раз подходит для хранения данных в паре ключ <=> значение. Если не ощибаюсь и ключ и значение типа Object. Из ключа получаете тип объекта с пом getClass(), а потом приводите значение к полученному типу.

PM MAIL   Вверх
Dims
Дата 18.7.2008, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Цитата(Samotnik @  17.7.2008,  20:36 Найти цитируемый пост)
ну не обязательно, можно привести к своему типу

Вроде бы параметры generics-ов всё равно в виде обджектов во время исполнения реализуются?
PM MAIL   Вверх
Samotnik
Дата 18.7.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



Dims, вот попробуй в
Код

ArrayList<Integer> al = new ArrayList<Integer>();

положить
Код

al.add("hello");

PM MAIL   Вверх
Dims
Дата 18.7.2008, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Цитата(Samotnik @  18.7.2008,  17:26 Найти цитируемый пост)
Dims, вот попробуй в

Ну, дык, копиллятор не даст. Но это не значит, что во время исполнения Vector<Integer> отличается от Vector<String>.

Встречный пример:

Код

public class Business implements Affair<Integer>, Affair<String> {
    public void doSomething(Integer i) {
    }
    
    public void doSomething(String s) {
    }

}

interface Affair<T> {
    public void doSomething(T t);
}


Низзя! 

"Business.java": Affair cannot be inherited with different arguments: <java.lang.Integer> and <java.lang.String> at line 15, column 1




PM MAIL   Вверх
ElKa
Дата 19.7.2008, 03:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



создаю HashMap.. пробую добавить данные.. получаю ошибку syntax error on tokens

что неправильно? 

Код

HashMap<String,String> constants = new HashMap<String,String>();
    
    constants.put("\\main","main");


компилирую в Eclipse.. может в нем проблема? 

Это сообщение отредактировал(а) ElKa - 19.7.2008, 10:19
PM   Вверх
garbuz
Дата 19.7.2008, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все прекрасно компилится под IDEA, значит косяки в Вашем Eclipse smile
Код

public class Main {
    public static void main(String[] args) {
        HashMap<String, String> constants = new HashMap<String, String>();
        constants.put("\\main", "main");
        Object o = constants.get("\\main");
        System.out.println(o.toString());
    }
}


ElKa, задача, описанная в первом посте, немного отличается от этой. Вам же вроде как и типы хранить надо было? smile
PM MAIL   Вверх
garbuz
Дата 19.7.2008, 11:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может что-нить типа такого? smile
Код

public class Main {
    public static void main(String[] args) {
        HashMap constants = new HashMap();
        String str = new String("Hello");
        Integer i = 10;
        ArrayList list = new ArrayList();
        constants.put(str.getClass(), str);
        constants.put(i.getClass(), i);
        constants.put(list.getClass(), list);

       Iterator iterator = constants.entrySet().iterator();
        while (iterator.hasNext()){
            Map.Entry entry = (Map.Entry) iterator.next();
            Object key = entry.getKey();
            Object value = entry.getValue();
            System.out.println(key.getClass().toString());
            System.out.println(value.toString());
        }

    }
}


Не компилил.
PM MAIL   Вверх
ElKa
Дата 19.7.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



garbuz

а мне и с типами надо будет сохранять, и со стрингами 

я использую JavaCC, поэтому мне только Eclipse подходит
что же мне делать?  smile 
PM   Вверх
Samotnik
Дата 19.7.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



ElKa,  я не понимаю в чем проблема  smile 
Что нужно ?
можно формулировку задачи конкретнее ? 


PM MAIL   Вверх
ElKa
Дата 19.7.2008, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Samotnik

 smile постараюсь:

мне надо запоминать пары.. переменная - значение.. слово входящего кода - его перевод /в стрингах/ и т.д.
я пытаюсь занести их в HashMap, но Eclipse выдает ошибку
он не воспринимает команду put

как мне решить эту проблему?
или в Eclipse
или заменить HashMap чем-то другим


PM   Вверх
Samotnik
Дата 19.7.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

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



ElKa,  загляни в раздел  Java IDE  and  Tools 
в твоем примере походу метода  main небыло, потому и не работало  smile 
PM MAIL   Вверх
ElKa
Дата 19.7.2008, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Samotnik

да.. с мэйном ошибок нет..
только у меня мэйн еще и в другом классе.. это ничего? 
может как-то по-другому можно проблему решить?  smile

Добавлено через 14 минут и 54 секунды
Samotnik

а если я все в конструктор занесу и мэйн уберу? это не будет ошибкой? 

Код

import java.util.HashMap;

public class Constants {
    HashMap<String,String> constants = new HashMap<String,String>();
    public Constants(){
        
        constants.put("\\main","main");
        constants.put("\\Skip","SKIP");
// и т.д.
    }

PM   Вверх
garbuz
Дата 19.7.2008, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ElKa @  19.7.2008,  14:36 Найти цитируемый пост)
я пытаюсь занести их в HashMap, но Eclipse выдает ошибку
он не воспринимает команду put

Eclipse, думаю, не может не воспринимать команду put, тут видимо грабли в чем-то другом.
Цитата(ElKa @  19.7.2008,  15:09 Найти цитируемый пост)
а если я все в конструктор занесу и мэйн уберу? это не будет ошибкой? 

А в конструкторе все без проблем что-ли заносится???
Слышал про javaCC, почему именно Eclipse? Ему вроде никакой IDE не надо... или там фича какая-нибудь есть?
PM MAIL   Вверх
ElKa
Дата 19.7.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



garbuz

если в конструкторе или в мэйн, то ошибки нет


а Eclipse пользуюсь, потому что там плагин есть для JavaCC
PM   Вверх
dorogoyIV
Дата 19.7.2008, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



ElKa, вопрос супердинамичный!!!
ты уж определись, дорогая, что тебе нужно?
может быть тему надо перенести в другой раздел?
PM MAIL   Вверх
garbuz
Дата 19.7.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



dorogoyIV, зачем же сразу так smile

ElKa, дорогая, тогда другой вопрос, где ошибка возникает, в каком месте в HashMap put делаешь? Давай сюда кода побольше smile

Это сообщение отредактировал(а) garbuz - 19.7.2008, 18:01
PM MAIL   Вверх
dorogoyIV
Дата 19.7.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



garbuz, извини, но ты не в каком то чате, ты на форуме программистов.
и ничего плохого я для ElKa не хотел.
"переместить тему" - в этом ничего обидного нет!!!

ElKa, ты спрашивай, только по теме пожалуйста  smile 
PM MAIL   Вверх
ElKa
Дата 19.7.2008, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



dorogoyIV

а мы разве не по теме?  smile 

garbuz

ошибки уже нет, потому что я все в мэйн занесла  smile 

в общем класс вот такой получился

Код

import java.util.HashMap;

public class Constants {

    public Constants(){

    }

    public static void main(){    
    final HashMap<String,String> constants = new HashMap<String,String>();
    
    constants.put("\\main","main");

 // и т.д.

    }
 



а как теперь эти константы в других классах использовать?
в каждом создавать объект Constants? 
PM   Вверх
garbuz
Дата 19.7.2008, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(ElKa @  19.7.2008,  18:40 Найти цитируемый пост)
а как теперь эти константы в других классах использовать?
в каждом создавать объект Constants?  

Ну зачем? Новый класс просто наследуй от этого и все.

Добавлено через 3 минуты и 9 секунд
Только лучше так наверно сделать будет
Код

import java.util.HashMap;
public class Constants {
    static HashMap<String,String> constants
    public Constants(){
    }
    public static void main(){    
    constants = new HashMap<String,String>();
    constants.put("\\main","main");
 // и т.д.
    }
 


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


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



вы чего?  smile 

Код

static HashMap<String,String> constants = new HashMap<String,String>();
...

ну и обращаетесь к коллекции как к статик
Код

Constants.constants ...

PM MAIL   Вверх
garbuz
Дата 19.7.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dorogoyIV @  19.7.2008,  19:11 Найти цитируемый пост)
ну и обращаетесь к коллекции как к статик

Ага, так еще и лучше smile Чего-то я тупанул  smile 

PM MAIL   Вверх
ElKa
Дата 19.7.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



спасибо! 
только вот наследовать его нельзя.. потому что уже наследуется другой класс.. что делать? 
PM   Вверх
garbuz
Дата 19.7.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ElKa, так делай как сказал dorogoyIV. Делаешь свой HashMap static, и обращаешься через имя клсса.
Код

Constants.constants

PM MAIL   Вверх
dorogoyIV
Дата 19.7.2008, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



во первых убери нафиг "public static void main()"
назови свой метод как нибудь подругому!!!

все таки поконкретнее объясни, в чем проблема?

хорошо, объясню - main - это ключевое слово, нельзя на Java применять это слово в других местах...
можешь написать например так: "public static void My()"

Это сообщение отредактировал(а) dorogoyIV - 19.7.2008, 21:01
PM MAIL   Вверх
ElKa
Дата 19.7.2008, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



назвала по другому.. теперь все вызывается
но теперь другая проблема

задаю 
constants.get("\\bool") выдает правильный код - Bool

задаю
key = "\\bool"
constants.get(key) выдает null
PM   Вверх
dorogoyIV
Дата 19.7.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



так это же конфликт типов(ну или объектов)  smile 
ты уверенна, что, правильно вызываешь объект?

вообще то трудно судить наобум....
PM MAIL   Вверх
dorogoyIV
Дата 19.7.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



кто такой "key"?
PM MAIL   Вверх
ElKa
Дата 19.7.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



key это String

выглядит это так

в другом классе:

Код

     private Constants con = new Constants();

     //...

     String s = tokenImage[((Token)type.getID()).kind];
     System.out.println("S: "+ s); // на печать выводится правильно - S: "\\bool"
     str = ch.toString() + ": "+ con.constants.get(s);
     System.out.println("channel with type: "+str); // а здесь выводится вместо con.constants.get(s) - null



а это класс Constants

Код

import java.util.HashMap;

public class Constants {

    public static HashMap<String,String> constants = new HashMap<String,String>();

    public Constants(){

               this.setConstants();
    }

    public void setConstants(){    
 ....

           constants.put("\\bool","Bool");
 
 ....
    }

    public String getCode(String key){

              System.out.println("key: "+key); // выдает:  key: "\\bool"
              System.out.println("\\bool code: "+constants.get("\\bool")); // выдает: \bool code: Bool 
              System.out.println(constants.get(key)); // выдает: null 
              return constants.get(key); // возвращает естественно тоже null
        } 
}

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

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

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


 




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


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

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