我有两个对象,即积分和费用。 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();
}
}
}
答案 0 :(得分:0)
如果弄清楚如何通过将计算出的测试变量存储在Point Class中的数组中而不是将其保存在Charges类中来解决问题。我认为cArrays'共享相同的引用,这就是为什么它们会覆盖所有这些引用。