1 / 1 / 0
Регистрация: 14.03.2013
Сообщений: 38
1

Клонирование объекта

22.07.2014, 01:01. Показов 2072. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
По заданному интерфейсу пишу класс вектора стандартного. Не проходят тесты для метода clone (). Объясните, пожалуйста, что я делаю не так? Я вроде и понимаю, но ничего не получается. На примерах убедился, что объекты не эквиваленты получаются.

Задание:
Java
1
2
3
4
5
6
7
8
9
10
11
12
public interface ArrayVector {
    /**
     * Задает все элементы вектора (определяет длину вектора).
     * Передаваемый массив не клонируется.
     * @param elements Не равен null
     */
    void set(double... elements);
 /**
     * Возвращает копию вектора (такую, изменение элементов 
     *  в которой не приводит к изменению элементов данного вектора).
     */
    ArrayVector clone();
Моя реализация:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
   
    package ru.ncedu.java.tasks;
 
 
public class ArrayVectorImpl implements ArrayVector {
 
    private double[] coordinates;
    private int length;
    
    @Override
    public void set(double[] elements) {
        this.coordinates = elements;
        this.length = elements.length;
    }
 
   @Override
        public ArrayVector clone(){
            ArrayVector clone = new ArrayVectorImpl();
            clone.set(coordinates.clone());
            return clone;
         
            
        }
 
    public ArrayVectorImpl(){
        double[] a = {0};
        this.set(a);
}
    
    public ArrayVectorImpl(double[] elements){
    this.coordinates = elements;
    this.length = elements.length;
        
}
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.07.2014, 01:01
Ответы с готовыми решениями:

Клонирование объекта
Здравствуйте, есть класс Student с полем marks (массив) и есть два объекта этого класса...

Клонирование объекта
есть метод. ему в качестве параметра передается объект (объект типа JEditorPane). в этом методе...

Клонирование объекта
Всем привет ! :) Как известно, в Java, есть 3 способа клонирования объекта: 1. С использованием...

Глубокое клонирование объекта, содержащий массив объектов
Добрый вечер. Есть перечисление MyEnum и класс с массивом перечислений class A{ MyEnum enum;...

5
Эксперт Java
4092 / 3826 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
22.07.2014, 01:27 2
Всё правильно. Что за тесты?
0
1 / 1 / 0
Регистрация: 14.03.2013
Сообщений: 38
22.07.2014, 14:41  [ТС] 3
Вот что мне выдает проверочная система:
clone() returns an object that is not equal to the original OR is not a deep copy of the original (i.e. array is not cloned)
junit.framework.AssertionFailedError: null

junit.framework.AssertionFailedError: null
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.assertTrue(Assert.java:20)
at junit.framework.Assert.assertFalse(Assert.java:34)
at junit.framework.Assert.assertFalse(Assert.java:41)
at ru.ncedu.java.tasks.ArrayVectorTest.testClone(ArrayVectorTest.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.jav a:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java :44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java: 15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:4 1)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20 )
at org.junit.internal.runners.statements.FailOnTimeout$1.run(FailOnTimeout.java:28)
0
Эксперт Java
4092 / 3826 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
22.07.2014, 15:10 4
Цитата Сообщение от vagabond1 Посмотреть сообщение
clone() returns an object that is not equal
Могу предположить, что нужно еще переопределить метод equals.
0
1 / 1 / 0
Регистрация: 14.03.2013
Сообщений: 38
22.07.2014, 16:42  [ТС] 5
Проблема решена.


Java
1
2
3
4
5
6
7
8
9
    @Override
    public ArrayVector clone() {
        double[] copiedElems = new double[length];
        for (int i = 0; i < length; i++) {
            copiedElems[i] = coordinates[i];
        }
        ArrayVector copiedOne = new ArrayVectorImpl(copiedElems);
        return copiedOne;
    }
0
Эксперт Java
4092 / 3826 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
22.07.2014, 17:19 6
vagabond1, Какой-то бред. Ваш новый код делает в точности тоже самое что и старый.
0
22.07.2014, 17:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2014, 17:19
Помогаю со студенческими работами здесь

Клонирование слова в ArrayList
Здравствуйте, решаю задачку из JavaRush, вот условие: Буква «р» и буква «л» 1. Создай список...

Почему клонирование не работает с интерфейсом
Вот первый вариант, который работает: HashSet&lt;String&gt; newset = new HashSet(); //...

Что значит глубокое клонирование?
Я понимаю, что такое поверхностное клонирование, но не могу реализовать глубокое, ибо не понимаю, в...

Создание объекта из другого объекта
Добрый день. Теорию знаю плохо, но работаю над этим. У меня есть класс Компания и есть класс...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru