Java 另一个对象中某个对象的Arraylist的行为类似于静态?
我有两个物体,点和电荷。在Points内部有一个指控列表。 我首先创建了一个点阵列,其中每个点都有一个相同的电荷阵列列表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对象中,然
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();
}
}
}