1

我的意思是我得到了一个对象数组,如果我要更改的列表没有给定列表中的一些对象,那么我将它们添加到我的列表中,如果我的列表确实有一些对象给定的列表没有然后我将它们从我的列表中删除。我试图实现这一点,但没有奏效。

void changeList(String data){
    String[] elements = data.split(":");
    for (int i = 0; i < elements.length - 1; i++) {
        if(i < listOfUsersModel.size() && !listOfUsersModel.getElementAt(i).equalsIgnoreCase(elements[i+1])){
            listOfUsersModel.remove(i);
            listOfUsersModel.addElement("<html>" + elements[i+1] + "</html>");
        } else if (i >= listOfUsersModel.size()){
            listOfUsersModel.addElement("<html>" + elements[i+1] + "</html>");
        }
    }
}

是的,elements 中的第一个元素将始终是 LIST,我只需要它来指定这是一个列表还是其他东西。PS ListOfUsersModel 是一个 DefaultListModel 对象。

4

1 回答 1

1

我可以在您的代码中看到一些问题:

  1. 你有一个字符串数组(由 产生split)和一个列表。您正在使用数组的索引作为列表的索引。这意味着您只会从列表中删除与数组中具有相同索引的匹配元素。这与您对您正在尝试做的事情的描述不符。

  2. 当你从列表中移除一个元素时,被移除元素之后的所有元素都会移动到不同的位置;即removeElement(i)导致元素i+1移动到位置i,元素i+2移动到i+1等等。但是......然后你增加i

  3. 列表末尾addElement添加一个元素。

如果您打算删除/替换所有匹配的元素,则需要一个嵌套循环。此外,请查看您正在使用的类的setElementinsertElement方法。(您显然在使用ListAPI 中没有的方法……但我不知道它是哪个 API。)

最后,我看不到您尝试在哪里执行此操作:

...如果我的列表确实有一些给定列表没有的对象,那么我将它们从我的列表中删除。

为此,您需要使用另一对嵌套循环进行第二次传递...

于 2017-04-18T03:23:22.380 回答