我有一段 java 代码,但现在是 运行 错误。希望大家帮帮忙

I have a piece of java code but it is running error now. Hope everybody help please

public static void main(String[] args) {

        List<String> list = new ArrayList<String>(Arrays.asList("20/04/2022", "20/04/2022","20/04/2022","21/04/2022", "22/04/2022", "22/04/2022"));
        List<String> list2 = new ArrayList<String>(Arrays.asList("1000","1000","1000", "15000", "36000", "36000"));

      
        for(int i=0;i<list.size()-1;i++) {
            while ((list.get(i).equals(list.get(i + 1))) && (list2.get(i).equals(list2.get(i + 1)))) {
                list.remove(i);
                list2.remove(i);
                
            }
        }
        for (String alist : list) {
            System.out.println("list1: "+alist);
        }
        for (String alist2 : list2) {
            System.out.println("list2: "+alist2);
        }

    }

image

image

如果删除的最后一项导致您的 i+1 超出范围,您需要中断 while 循环。 试试这个:

   for(int i=0;i<list.size()-1;i++) {
        while ((list.get(i).equals(list.get(i + 1))) && (list2.get(i).equals(list2.get(i + 1)))) {
            list.remove(i);
            list2.remove(i);
            if(i+1 >= list.size() || i+1 >= list2.size()) break;
        }
   }

正如 gapserg 在他的回答中提到的,作为副作用,您修改了初始列表。这仍然适用于您的方法,但还有更好的选择。

例如,您可以创建一个新列表来复制唯一对,而不必像注释中所述那样删除所有重复项。

旁注:您的方法仅在列表具有相同大小、所有重复项彼此相邻并且您不关心初始列表被修改的情况下才有效。

不建议使用循环“for”,因为您更改了“列表”。

List<Integer> list = new ArrayList<>(Arrays.asList(new Integer[]{1, 1, 3, 3, 3, 4, 4, 5}));
    int i = 0;
    while (i < list.size() - 1) {
        if (list.get(i).equals(list.get(i + 1))) {
            list.remove(i);
        } else i++;
    }
    System.out.println(list.toString());