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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с присвоением значения 
V
    Опции темы
ElKa
Дата 7.9.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть переменная а  класса А 
ей присваивается значение б
в объектах класса А есть переменная х

х объекта б приcваевается значение у

потом а присв. значение с
х в с получает значение z

потом оказывается что оба объекта б и с имеют x=z
почему? как этого избежать? 


A a= null

a = b
b.x = y

a = c
c.x = z

в итоге 
в b: x=z
в c: x=z

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


Autonomous R&D
**


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

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



Переменная x в классе A объявлена как static?
PS: Лучше код смотреть, он как то понятнее. smile 
PM MAIL   Вверх
ElKa
Дата 7.9.2008, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот код

Код

public class DataVisitor extends AbstractVisitor{
    private ASTEffectOp currentEffectOp = null;  
    private ASTEffectPredicate currentEffectPred = null; 

//...
    public Object visit(ASTEffectOp node, Object data) { 
        currentClass.addEffectOp(node);
        currentEffectOp = node; 
//...

    public Object visit(ASTEffectPredicate node, Object data) {
        currentEffectPred = node;
//...

    public Object visit(ASTEffectAssignment node, Object data) {
         currentEffectOp.addDashVarPred(node.getDashVarName(),currentEffectPred);
 

class ASTEffectOp{

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

//... 

  public void addDashVarPred(String name, ASTEffectPredicate predicate){
      dashVarPred.put(name,predicate);
  }

//... 


node.getDashVarName() задает имя переменной 
переменные могут быть одинаковы в разных предикатах 

каждая EffectOp имеет несколько Predicate..  Predicate может быть Assignment
и надо, чтобы в этом случае в актуальную операцию в хэш-таблицу был занесен этот актуальный предикат 

но в конце оказывается, что все операции имеют в таблице самый последний предикат, который соответствует данному имени переменной

в общем если я в операцию1 заношу пару (х, предикат1)
а в операцию2 (х, предикат2)

то в конце они обе имеют (х, предикат2)

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


Autonomous R&D
**


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

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



Так у вас HashMap<String,ASTEffectPredicate> dashVarPred в классе ASTEffectOp объявлена статической. Это значит, что во всех объектах класса ASTEffectOp используется один и тот же экземпляр HashMap. Поэтому 
Цитата

если я в операцию1 заношу пару (х, предикат1)
а в операцию2 (х, предикат2)
 с одним и тем же ключом, в результате в dashVarPred остается только пара (х, предикат2)

Это сообщение отредактировал(а) ivg - 7.9.2008, 16:14
PM MAIL   Вверх
ElKa
Дата 7.9.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ivg, 

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

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

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


 




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


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

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