2014-11-14 3 views
1

Я считаю, что мой код неправильный, но может кто-то исправить меня по моей ошибке. Я пытаюсь глубоко клонировать массив объектов, но класс А, похоже, не является глубокой копией, поскольку у меня возникают проблемы с ней. Может кто-то, пожалуйста, помогите. У меня есть трудности с копированием массива A.Trouble глубокое клонирование объекта массива

Class A implements Cloneable{ 
private int year; 
private double data; 

A(int year, double data) 
{ 
    setInt(year); 
    setDouble(data); 
} 
public void setInt(int year) 
{ 
    this.year = year; 
} 
public void setDouble(double data) 
{ 
this.data = data; 
    } 
public int getYear() 
{ 
return year; 
} 
public double getData() 
{ 
return data; 
} 
public Object clone() 
{ 
A clonedA = new A(this.getYear(), this.getData()); 
return clonedA; 
}} 

class B implements Cloneable{ 
private A[] a; 
private String name; 
private int arraylength; 
private int index; 

public B(String name, int length) 
{ 
    this.name = name; 
    this.arraylength = length; 
    a = new A[array.length]; 
    index = 0; 
} 

public void addToA(int year, double data) 
{ 
    a[index] = new A(year, data); 
    index++; 
    } 
    public String getName(){ 
    return name; } 
    public int getLength(){ 
    return array length;} 

    public void setName(String name) 
    { 
    this.name= name 
    } 
    public Object clone() 
{ 
    B clonedB = new B(this.getName(), this.getLength()); 

    for(A clonedArray: a) 
    { 
clonedB.addToA(clonedArray.getYear(), clonedArray.getData()); 
    } 
    return clonedB; 
} 
+2

Это не должно даже компилироваться - 'A (int double, double data)' недействительно Java (обратите внимание на 'int double'). Можете ли вы отправить сообщение [MCVE] (http://stackoverflow.com/help/mcve)? – Mac

+0

Я считаю, что A (int double, double data) должен быть A (int year, double data) вместо – turingcomplete

+0

Кроме того, ваш метод clone в A не возвращает ничего, даже если он должен возвращать Object. – turingcomplete

ответ

1

Ваш метод клонирования в классе B, кажется, неправильно: Я предлагаю вам STH как

public Object clone() 
{ 
B newB = new B(this.getName(), this.getLength()); 
for(int i =0;i<newB.a.length;i++) 
    { 
     newB.a[i] = a[i]; 
    } 
    return newB; 
    } 

Можно также попробовать конструктор копирования;

Смежные вопросы