我试图在Java循环中满足条件时递减增量器,例如:
假设我们有一个包含许多(升序排序)整数的ArrayList,当我遇到2个或更多后续相等的整数时,我想将它们合并:

for(int i=0; i<intArr.size();i++){

 if(intArr.get(i).equals(intArr.get(i+1))){
    intArr.set(i,(intArr.get(i) + intArr.get(i+1)));
    intArr.remove(i+1);
    i--;
 }

}


消息底部的一个更具体的示例。

这将失败,增量器(i)将被“临时”设置为(i--),但是当它返回for行时,它将具有其原始值。
H您是否知道如何递减i,以便在下一次迭代时仍可以比较(i == i + 1?)
谢谢

public class Test
{
  private static final long serialVersionUID = 1L;

  public static void main(String[] args)
  {

    ArrayList<Integer> intArray = new ArrayList<Integer>();
    intArray.add(1);
    intArray.add(2);
    intArray.add(3);
    intArray.add(4);
    intArray.add(4);
    intArray.add(4);
    intArray.add(5);
    intArray.add(6);
    intArray.add(7);
    intArray.add(8);
    intArray.add(9);
    intArray.add(9);
    intArray.add(9);
    intArray.add(9);
    intArray.add(10);
    intArray.add(11);
    intArray.add(12);
    intArray.add(12);

    for (int i = 0; i < (intArray.size() - 1); i++)
    {
      if (intArray.get(i).equals(intArray.get(i + 1)))
      {
        intArray.set(i, (intArray.get(i) + intArray.get(i + 1)));
        intArray.remove(i + 1);
        i--;
      }
    }

    for (int i = 0; i < intArray.size(); i++)
    {
      System.out.println(intArray.get(i));
    }
  }

}


印刷品:

1
2
3
8
4
5
6
7
8
18
18
10
11
24

最佳答案

那是因为当找到前两个4时,会将它们更改为8。现在,当第三个4出现时,数组为

1个
2
3
8
4
5
6




所以这次,它检查是否为(8 == 4),这是错误的。因此,它跳过了下4个!

10-07 12:48