-1

私は家の仕事をしています。配列を使用し、配列の要素はリンクされたリストです。行の要素が固定されていないため、問題の状態に応じて削除または追加する必要があります。以下のコードを試してみましたが、たとえば p[0] などの固定行に新しい要素を追加すると、すべての値が追加されます。この問題を解決する方法を教えてください。

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
4

1 に答える 1

1

問題は、すべてlinkのインスタンスを同じで初期化していることですLinkedList<Integer>:

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これを行うと、すべてのインスタンスが同じ変数をlist参照する属性を持つことに注意してください。LinkedList<Integer> lしたがって、1 か所で変更すると、全員が更新されます(同じ参照であるため)。

これを解決するには多くの方法があります。

  • for ループの反復ごとに新しい LinkedList を作成します。
  • 別のコンストラクターを使用して新しいlinkインスタンスを作成します。
  • link[] p配列を1つずつ入力してください...
于 2012-10-14T20:39:26.603 に答える