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

标签 java for-loop

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

相关文章:

c - 用于定义和打印矩阵的所有元素的函数

Java本身改变字符的大小

Java 枚举类型名称反射

java - 什么必须从java中的抽象类实现?

javascript - 使用javascript迭代地增加字体大小

matlab - 通过在每次迭代中省略一个索引来生成一组索引的循环

java - 用计时器强制断线停止

java - 单击时更改 ListView 项目背景

javascript - 如何在javascript中将一个数组拆分为两个数组?

java - 为什么我不能通过 "for"循环保存 EnumMap 条目,即使我使用 "final"?最佳解决方法?