列表报告中的所有对象都是相同的java?
Im使用java中的对象列表(区域),我将其定义为:列表报告中的所有对象都是相同的java?,java,list,Java,List,Im使用java中的对象列表(区域),我将其定义为: public static List<Area> areaList = new ArrayList<Area>(); 然后我访问列表,检查其中的每个区域,如下所示: for (int i = 1; i < areaList.size(); i++) { System.out.println(areaList.get(i).somevariable)); } (这里什么是重要的) 但它返回列表中
public static List<Area> areaList = new ArrayList<Area>();
然后我访问列表,检查其中的每个区域,如下所示:
for (int i = 1; i < areaList.size(); i++) {
System.out.println(areaList.get(i).somevariable));
}
(这里什么是重要的)
但它返回列表中的所有对象,它们的值都是相同的,即上次访问的对象的值
有人能告诉我哪里出了问题吗?这不是解决方案,但您应该从
i=0
开始循环。您可以尝试打印每个对象的hashcode()
,看看它们是否真的相同,前提是不被覆盖
同时,您要从
1
开始迭代,您需要从0
开始迭代整个集合。确实要从i=1开始而不是从i=0开始吗?如果您只使用两个对象运行测试,这可能与此相关。我查看了您上传的代码,发现了错误
您将类区域中的每个字段声明为static:
public class Area {
public static int posx;
public static int posy;
public static int posz;
}
因此,所有实例的字段都是相等的,因为类区域
只有一个posx
字段(详细信息请阅读答案)。正因为如此,每次写信给,e。g、 ,posx
覆盖旧值。删除static
关键字,然后类区域的所有实例都有自己的实例变量
您还应该考虑将它们私有化,并提供getter和setter方法
我还没有详细查看您的代码,但是有几个地方使用了静态变量。您应该重新检查此问题。错误不在您显示的代码中。请创建一个暴露错误的完整但最小的示例(请参阅)。如何填写此列表?px
、py
、pz
、radius
和wl
从哪里来?请注意:Java使用基于0的索引(请参见for循环)。是否有意跳过元素0?还考虑使用每个构造,<代码>(区域A:AeRealGeor){PrtLn(A.SoMeVabrabl);}变量不太重要,就像程序的其他部分一样,它是一个BukKIT插件,我已经在这里上传了完整的源代码:它包含3个类,但是代码的其他部分你需要什么?我已经给了你代码中唯一写入列表的部分?我看了一遍代码。你可以在下面找到我的答案。我认为ArrayList应该只查看equals方法。当然,hashCode方法应该相应地编写,但这并不是这里的错误来源,但是hashCode
提供了一些打印出来的内容,以查看它们是否实际引用了同一个对象。我很抱歉,这是在我尝试了一些不同的东西之后。对了,谢谢,我需要修改static,这是有益的:D
areaList.get(i)
public class Area {
public static int posx;
public static int posy;
public static int posz;
}