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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> клонирование 
V
    Опции темы
ressac
Дата 15.3.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть класс X в нём реализован clone()

атрибуты

int[][] m:
int x

так вот, при клонировании, матрица не клонируется, если поменять m[0][0]=0 то в клоне объекта  m[0][0] тоже станет 0
PM MAIL   Вверх
batigoal
Дата 15.3.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ressac @  15.3.2009,  15:19 Найти цитируемый пост)
есть класс X в нём реализован clone()

Значит, криво реализован. Если требуется выполнять "глубокое" копирование, то об этом придется позаботиться самостоятельно.


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


Шустрый
*


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

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



реализуй метода сlone(), при этом определи копирование массива
Код

public class Entity implements Cloneable {
    int [][] m = null;
    int x;
    public Entity() {
          x = 0;
          m = new int[5][5];
    }
     
     @Override
    protected Entity clone() throws CloneNotSupportedException {
        Entity temp = new Entity();
        temp.x = this.x;
        if (m==null) throw new NullPointerException("Array is null");
        int count_i = m.length;
        temp.m = new int[count_i][];
        for (int i = 0;i<count_i;i++){
            int count_j = m[i].length;
            temp.m[i] = new int[count_j];
            for (int j=0;j<count_j;j++){
                temp.m[i][j]=i+j;
            }
        }
        return temp;
    }
}


Это сообщение отредактировал(а) 4EJIOBEK - 17.3.2009, 12:07
PM MAIL ICQ   Вверх
Joss
Дата 17.3.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Скорее уж так:
Код

public class Entity implements Cloneable {
    private int x;
    private int[][] m;
    
    public Entity(int x) {
        this.x = x;
        m = new int[2][2];
    }
    
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Entity clonedEntity = (Entity) super.clone();
        clonedEntity.m = m.clone();
        for(int i = 0; i < m.length; ++i) {
            clonedEntity.m[i] = m[i].clone();
        }
        return clonedEntity;
    }
}

PM MAIL   Вверх
4EJIOBEK
Дата 17.3.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Joss @ 17.3.2009,  10:24)
Скорее уж так:
Код

public class Entity implements Cloneable {
    private int x;
    private int[][] m;
    
    public Entity(int x) {
        this.x = x;
        m = new int[2][2];
    }
    
    
    @Override
    protected Object clone() throws CloneNotSupportedException {
        Entity clonedEntity = (Entity) super.clone();
        clonedEntity.m = m.clone();
        for(int i = 0; i < m.length; ++i) {
            clonedEntity.m[i] = m[i].clone();
        }
        return clonedEntity;
    }
}

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

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

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


 




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


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

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