iJavaループで条件が満たされたときにインクリメントをデクリメントしようとしています。例:2つ以上の後続の等しい整数に出会ったときにそれらをマージしたい多くの(昇順でソートされた)整数を含むArrayListがあるとします。
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行に戻ると、元の値になります。次の反復でまだ比較できるように、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