gpt4 book ai didi

java - 一个简单的 for 循环的奇怪错误

转载 作者:行者123 更新时间:2023-12-02 05:54:45 24 4
gpt4 key购买 nike

我当前正在尝试读取此 XML 文件(请注意,为了简单起见,我简化了 XML):

<Users>
<User id="1" name="NY-01" location="New York">
<Hosts>
<Host>
<Host_Name>val9</Host_Name>
</Host>
<Host>
<Host_Name>td8</Host_Name>
</Host>
</Hosts>
</User>
</Users>

我使用 JAXB 库来读取它。

所以本质上我做了一个循环:

List<DataVal> l = new ArrayList<DataVal>();

for (int i = 0; i < data.getUsers().size(); i++) {
DataVal pc = new DataVal();
pc.setUser_id(data.getUsers().get(i).getId().toString());
pc.setUser_name(data.getUsers().get(i).getName());
pc.setUser_location(data.getUsers().get(i).getLocation());

for (int j = 0; j < data.getUsers().get(i).getHosts().getHost().size(); j++) {
pc.setHost_name(data.getUsers().get(i).getHosts().getHost().get(j).getHostName());
System.out.println(pc);
l.add(pc);
}
}

请注意,当我在添加到列表之前执行 System.out.println(pc) 时,pc 的值是正确的;

但是当我在这段代码之后打印 ArrayList“l”时,我两次都得到了 host_name td8,而不是下一次得到的 val9 和 td8。不过,id、名称、位置值都是正确的。

这是为什么?

这是打印列表的代码:

for (int q = 0; q < l.size(); q++) {
System.out.println(l.get(q)); // I have a toString implementation of this...
}

编辑:用 eclipse 调试后,由于某种原因,在 j 循环的每次迭代之后,这些值都更改为 host_name 的最后一个循环值...

最佳答案

似乎您每次都替换 pc.setHost_name ,这意味着您的主机名值将等于主机的最后一次读取。

如果它们需要不同,这意味着您需要在主机循环内而不是用户循环内创建 DataVal 对象。

关于java - 一个简单的 for 循环的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com