2014-01-12 7 views
-2

나는 arraylist를 포함하는 수업을 만들었습니다. 값이 올바르게 추가되고 있습니다. 값을 얻으려고하면 항상 동일한 값을 반환합니다. 코드의ArrayList가 항상 같은 값을 반환하는 이유는 무엇입니까?

public class Data { 

    public ArrayList<Piece[][]> allMoves=new ArrayList<Piece[][]>(); 

    public Data() { 

    } 
} 

다른 조각 추가

public void save_this_move() 
{ 
    Piece temp[][]=new Piece[8][8]; 

    for(int i=0;i<8;i++) 
    { 
     for(int j=0;j<8;j++) 
     { 
      temp[i][j]=board[i][j]; 
      //System.out.print(temp[i][j].get_name()+" "); 
     } 
     //System.out.println(); 
    } 
    allMoves.add(temp); 
    //System.out.println("................."); 
} 

public void undo() 
{ 
    for(int i=0;i<allMoves.size();i++) 
    { 
     Piece temp[][]=allMoves.get(i); 
     System.out.println(i+"th index"); 
     for(int j=0;j<8;j++) 
     { 
      for(int k=0;k<8;k++) 
      { 
       System.out.print(temp[j][k].get_name()+" "); 
      } 
      System.out.println(); 
     } 
    } 


} 

이 해결 방법을하는 저를 도와주세요를 따를 때 그 값은 액세스 할 수 ??

답변

2

문제는 64 Piece 개체

이 만드는 동일한 세트에 저장 allMoves 참조의 모든 요소들을 한꺼번에 변경이다. 대신 당신이 객체를 복사해야

 temp[i][j]=board[i][j]; 

에 대한 참조를 복사

. 이 코드를 사용할 때

+0

그래서, 루프 내부 – keyser

+0

@MohammadS에 조각 초기화를 이동 : 그것은 새로운 배열을 작성합니다. 그러나'temp [i] [j] = board [i] [j]'는 하나의 배열에서 다른 배열로 참조를 단순히 복사합니다. – NPE

+0

save_this_move 메소드는 다음 인스턴스마다 호출됩니다. 나는 그것을 해결할 수있는 방법을 얻지 못했다. –

0

메이트,

allMoves.add(temp); 

실제로 온도의 기준이 걸립니다. ..

재밌게을

그래서 당신이 뭔가 같은

allMoves.add(new String[][]{....); 

이 하나가 작동하지 않을 수 있습니다 할 필요가 있지만 포인트를 가지고있어!

좋아들, 방법은 마지막 객체와 중복으로의 참조가 필요하지만 들어,

String [] thing = new String[3]; 
thing = {bla, blabla, blablabla} 
allmoves.add(thing); 

그것이 {blablabla처럼 될 것입니다 추가하려고 string.If 단일 배열에 대한 예제를 제공 할 수 있습니다 추가 당신이

allmoves.add(New String{bla, blabla, blablabla}); 

를 사용하는 경우 blablabla, blablabla}

는하지만, blablabla

즐, blabla 될 것입니다

알았습니까? bug.Thats 이런 종류의 그것을 할 수있는 유일한 방법이

참조 및 things.Since ...

+0

질문은 이미 답변되었고 당신의 대답은 새로운 것을 가져 오지 않았습니다. – NiematojakTomasz

+0

@ kaan-Öztürk 대답의 관련성에 의문점이있을 수 있지만, 대답은 받아 들여지지 않았기 때문에 대답하지 않습니다. – m4rtin

관련 문제