另一个对象中的对象的Arraylist就像静态一样?

时间:2014-04-26 21:48:25

标签: java object for-loop arraylist

我有两个对象,即积分和费用。 Inside Points有一个收费的Arraylist。 我创建了一个点数组,其中每个点在FIRST都有相同的电荷列表。

clist.add(new Charges(2,-1));
clist.add(new Charges(2,-3));
plist.add(new Points("P1",0,-2));
plist.add(new Points("P2",2,-2));

点数进入ArrayList(Points)plist并在clist中充电。 稍后它将clist存储在plist中的每个Points对象中,然后在pArray中存储在类计算中,此时将遍历pArray以从Points类调用测试方法。

然后在通过添加变量(来自Points对象的x,y和其arraylist中的Charges)来计算测试变量之后,循环遍历arraylist(Points)和Arraylist(Charges)我打印出测试变量。

它应打印为:

0
-3
1
-1

但是当我尝试打印时,我得到:

1
-1
1
-1

所以最后循环的变量(1,-1)也存储在其他Points对象的cArray中,就像静态变量一样。 我无法弄清楚问题出在哪里。请帮忙纠正这个。

积分等级

import java.util.*;
public class Points
{
    ArrayList<Charges> cArray;

    int x;
    int y;
    String name;

    public Points(String p,int x1,int y1)
    {
        x=x1;
        y=y1;
        name=p;
    } 

    public ArrayList<Charges> getCArray()
        {return cArray;}
    public void setCArray(ArrayList<Charges> a)
        {cArray=a;}

    public void testCode()
    {
        for(int i=0;i<cArray.size();i++)
                {
                    Charges temp = cArray.get(i);
                    int chargex=temp.getX();
                    int chargey= temp.getY();
                    int test = x+y+chargex+chargey;
                    temp.setTest(test);
                    cArray.set(i,temp);
                }
    }

    public void printString()
    {
        for(int i=0;i<cArray.size();i++)
            {
            System.out.println(cArray.get(i).getTest());
            }
    }

}

收费等级

public class Charges
{
    int x;
    int y;
    int test;

    public Charges(int x1, int y1)
    {
        x=x1;
        y=y1;
    }

    public int getX()
    {return x;}
    public void setX(int x1)
    {x=x1;}

    public int getY()
    {return y;}
    public void setY(int y1)
    {y=y1;}

    public int getTest()
    {return test;}
    public void setTest(int t)
    {test=t;}
    }

计算类

import java.util.*;
public class Calculations
{
    ArrayList<Points> pArray;

    public ArrayList<Points> getPointArray(){return pArray;}
    public void setPointArray(ArrayList<Points> p){pArray=p;}

    public void allTest()
    {
    ArrayList<Points> temparray= new ArrayList<Points>();   
        for(int j=0;j<pArray.size();j++)
        {
        Points point =pArray.get(j);
        point.testCode();
        temparray.add(point);
        }
    pArray=temparray;
    }
}

客户端类

import java.util.*;
public class Client
{
    public static void main(String [] args)
    {
    ArrayList<Charges> clist = new ArrayList<Charges>();
    ArrayList<Points> plist = new ArrayList<Points>();
    clist.add(new Charges(2,-1));
    clist.add(new Charges(2,-3));
    plist.add(new Points("P1",0,-2));
    plist.add(new Points("P2",2,-2));



    ArrayList<Points> list= new ArrayList<Points>();            
    for(int i=0;i<plist.size();i++)
        {
        ArrayList<Charges> chlist= clist;
        Points point = plist.get(i);
        point.setCArray(chlist);
        list.add(point);
        }
    Calculations calc=new Calculations();
    calc.setPointArray(list);
    calc.allTest();
    for(int k=0;k<calc.getPointArray().size();k++)
        {
        Points p=calc.getPointArray().get(k);
        p.printString();

        }
    }
}

1 个答案:

答案 0 :(得分:0)

如果弄清楚如何通过将计算出的测试变量存储在Point Class中的数组中而不是将其保存在Charges类中来解决问题。我认为cArrays'共享相同的引用,这就是为什么它们会覆盖所有这些引用。