Java 자바 객체 복사(Clone) 입니다.. 뭐가 잘못된 거죠??
눈꽃
public class Puzzle implements Cloneable{
private final int BLANK = 0;
private int[][] __puz;// __puz : Own Node
private int _x,_y;// Position of Blank Block
private int _s; // Size of this Puzzle
private int pathCost, depth;// pathCost : Path Cost, depth : Depth
...
public Object clone(){
Puzzle obj = null;
try{
obj = (Puzzle)super.clone();
obj.__puz = (int[][])__puz.clone();
}catch(CloneNotSupportedException e){
System.out.println(복사 할수 없다 자너..ㅡㅡㅋ);
}
return obj;
}
...
}
이렇게 클론을 정의하고 사용하는데, 그냥 int타입은 복사가 되는듯 한데...
계속 퍼즐 클래스 안의 __puz가 원래것을 참조하고 있습니다.
뭐가 잘못된 것일까요??
enQueue((Puzzle)_puz.clone());
deQueue();
아래처럼 사용하고 있는데
PuzzleQueue 클래스 안의 enQueue는 아래와 같습니다.
public void enQueue(Puzzle puz) { // 객체 추가 메소드
if(size == maxSize){
Puzzle[] _que = new Puzzle[maxSize*2];
for(int i = 0; i size; i++ ){
_que[i] = que[i];
}
que = _que;
maxSize *= 2;
enQueue(puz);
}else{
//que[size] = (Puzzle)puz.clone();
que[size] = (Puzzle)puz.clone();
size++;
System.out.print(인큐됐다.);
}
}
public Puzzle deQueue() throws NoDataInQueueException{ // 객체 삭제 메소드
if(isEmpty()){
throw new NoDataInQueueException();
}
Puzzle ret = new Puzzle();
ret = que[0];
for(int i = 0; i size-1; i++ ){
que[i] = que[i+1];
}
size--;
que[size] = null;
System.out.print(디큐됐다.);
return ret;
}다른 곳에 사용할 때 잘 못된 것일까요?
이틀째 답을 못찾고 있습니다.
-
초고리
두단계의 단계를 가진다고 하면 어떻게 된다는 말씀이신지??
obj.__puz = (int[][])__puz.clone();
이렇게 clone() 에 이중배열까지 clone()을 해 줬는데.
무얼 또 더해줘야 하는지?? -
하랑
흠. 내용은 안 읽어봤습니다. 죄송합니다. 객체의 복사는.. 얕은 복사가 이루어 집니다. 깊은 복사가 이루어 지기 위해서는 따로 일을 해 주어야 지요~ 얕은 복사란.. 객체를 복사할때. 자식으로의 단 한단계만 복사가 되는것입니다. 이중 배열인 경우에는 두단계의 참조를 가지기 때문에. 아마도 최종의 객체값들은 공유를 하게 될것입니다.