我当前正在尝试读取此 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/