Java 另一个对象中某个对象的Arraylist的行为类似于静态?

Java 另一个对象中某个对象的Arraylist的行为类似于静态?,java,object,for-loop,arraylist,Java,Object,For Loop,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)); 点被分为一个数组列表(点)plist和一个电荷列表。 稍后,它将clist存储在plist中的每个Points对象中,然

我有两个物体,点和电荷。在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));
点被分为一个数组列表(点)plist和一个电荷列表。 稍后,它将clist存储在plist中的每个Points对象中,然后在类计算中存储在pArray中,此时将循环通过pArray从Points类调用测试方法

然后,在通过添加变量(来自Points对象的x,y及其arraylist中的电荷)来计算测试变量后,我打印出测试变量,该变量在arraylist(Points)和arraylist(Charges)中循环

它应打印为:

0
-3
1.
-1
但当我尝试打印它时,我得到:

1
-1
1.
-1
所以最后循环的变量(1,-1)也像静态变量一样存储在其他点对象的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());
            }
    }

}
计算类

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.*;
公共类计算
{
ArrayList pArray;
公共ArrayList getPointArray(){return pArray;}
public void setPointArray(ArrayList p){pArray=p;}
公共测试()
{
ArrayList temparray=新的ArrayList();

对于(int j=0;j如果您知道如何通过将计算出的测试变量存储在Point类的数组中而不是将其保留在Charges类中来解决此问题,则我认为cArrays共享相同的引用,这就是为什么他们会覆盖所有这些变量的原因。

可能的重复请您花时间修复原始问题不要创建新的问题。我删除了另一个问题,因为它太乱了,必须创建一个原始代码的示例来更好地显示我的问题。顺便说一句,要打印
ArrayList
,您只需执行
System.out.println(cArray)
。是的,我知道,但打印arraylist不是问题,问题在于无论点对象是什么,所有的cArray都是相同的。
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();

        }
    }
}