2012-10-14 4 views
-1

나는 집안일을 가지고 있는데, 배열의 요소를 사용했다. 행의 요소가 문제가되는 조건에 따라 삭제 또는 추가해야하기 때문에 링크 된 목록이다. 코드를 아래에 있지만 고정 된 행에 새 요소를 추가 할 때 문제가 있습니다. p [0] 값이 모두 추가 될 것입니다. 어떻게이 문제를 해결할 수 있습니까?배열 요소로 자바에서 연결된 목록

LinkedList<Integer> l = new LinkedList<Integer>(); 
l.add(Integer.valueOf(2)); 
l.add(Integer.valueOf(0)); 
l.add(Integer.valueOf(3)); 
for(int j=0;j<p.length;j++) 
//it will be the same LinkedList<Integer> l per all the instances in the array 
    p[j] = new link(l); 

를 적어 둡니다이 작업을 수행 할 때마다 link 인스턴스가 LinkedList<Integer> l 같은를 참조하는 list 속성이됩니다 :

public class schedule 
{ 
    public class link 
    { 
    public LinkedList <Integer>list = new LinkedList<Integer>() ; 
    public link(LinkedList<Integer> value) 
    { 
     list = value; 
    } 
    public link(int value) 
    { 
     list.add(Integer.valueOf(value)) ; 
    } 

} 


private link p[] = new link[10]; 
public schedule() 
{ 
    LinkedList<Integer> l = new LinkedList<Integer>(); 
    l.add(Integer.valueOf(2)); 
    l.add(Integer.valueOf(0)); 
    l.add(Integer.valueOf(3)); 
    for(int j=0;j<p.length;j++) 
     p[j] = new link(l); 



    p[0].list.add(9); // here I have problem 

    for(int j=0;j<p.length;j++) 
    { 
     System.out.print("p["+j+"]:"); 
     for(int i=0;i<p[j].list.size();i++) 
      System.out.print(p[j].list.get(i).intValue()); 
     System.out.println(); 
    } 

} 
public static void main(String []arg) 
{ 
    new schedule(); 
} 


the output is like this : the value 9 added to all but I want to be added just for first element 
p[0]:2039 
p[1]:2039 
p[2]:2039 
p[3]:2039 
p[4]:2039 
p[5]:2039 
p[6]:2039 
p[7]:2039 
p[8]:2039 
p[9]:2039 
+0

채우기 시도하고 더 구체적으로 말씀 질문을하시기 바랍니다. 나는 네가하는 말을 정말로 이해하지 못한다. – OmniOwl

+0

어떤 문제가 있습니까? 그리고 귀하의 질문을 올바르게 다시 말하십시오. –

+0

OP는 의견에 문제를 표명했습니다. 이해하기 쉽도록 * problematic * 문장 위에있는 코드를 확인하십시오. –

답변

1

문제는 당신이 같은 LinkedList<Integer>으로 모든 link 인스턴스를 초기화하고 있다는 것입니다 변하기 쉬운. 따라서 한 곳에서 수정하면 으로 업데이트됩니다 (동일한 참조이므로).

는이 문제를 해결하는 방법에는 여러 가지가 있습니다

  • 이 루프의 모든 반복에 새로운 LinkedList의를 만듭니다.
  • 다른 생성자를 사용하여 새 link 인스턴스를 만듭니다.
  • link[] p 배열 하나 하나 ...
+0

그냥 요소를 추가하기 위해 새 링크 생성자를 사용했지만 기존 요소를 지우고 새로운 요소를 추가합니다. – AKWARD

+0

@AKWARD 코드가하는 일을 이해해야합니다. 이 경우 디버거를 사용하고 코드의 일부 System.out.println (...); 줄을 사용하여 변수의 동작을 확인해야합니다. 'link' 클래스는'LinkedList '목록의 값을 대체하는'LinkedList ' 생성자를 가지고 있습니다. –

+0

네, 이제 작동 중입니다. 모든 반복마다 새로운 연결 목록을 작성했습니다. 감사합니다. – AKWARD