ArrayListのデータ構造でJosephusの問題を解決しようとしています。タスクはListIteratorを使用することです。私は除去部分にこだわっています。listiteratorに関する懸念事項を削除します。java
1,2,3,4,5,6,7,8,9,10の兵士に次のような10人の兵士がいると言います。 私はすべての第3兵士を踏む必要があります。つまり、3つ、6つ、 9、など。
私が正常に3を削除することができていますが、それは7ではなく6を削除し、次回は、あなたが私のコードを見直し、私が間違っているのを教えてくださいすることができ:
private static int suicide (List<Integer> list, int step) {
ListIterator<Integer> itr = list.listIterator();
while(itr.hasNext()&& list.size() != 1){
if((itr.nextIndex()+1) % step == 0) {
System.out.println(itr.previousIndex()+1);
itr.next();
itr.remove();
itr.next();
}
else {
itr.next();
}
if(!itr.hasNext()){
itr=list.listIterator();
}
}
return 0;
}
私は、要素がインデックス内で移動し、ロジックに応じて要素7がインデックス '5'(論理的に6)にあり、したがって削除されるということを理解しています。私はそれを止める方法を理解したい。 – user4261932