关注listiterator删除java

时间:2016-04-01 06:16:53

标签: java listiterator

我正在尝试在arrayList数据结构中处理Josephus问题,而任务是使用ListIterator。我被卡在拆卸部分。

让我们说我有10名士兵--1,2,3,4,5,6,7,8,9,10 而且我必须每三个士兵一步 - 这意味着删除3,然后是6,然后是9,依此类推。

我能够成功删除3,但下次删除7而不是6.你能不能查看我的代码并告诉我我做错了什么:

SET @Sql = '
            SELECT  CASE WHEN GROUPING(trntypename) = 1 THEN ''Total'' ELSE trntypename END AS trntypename,
             ' + @SelectQuery + ',
              SUM(AmountDue) Total
            FROM RAccounts_Receivable
            WHERE'

       BEGIN
        IF (@rep <>'''') 
            SET @sql = @sql + '([SalesmanGroupName] = ''+@rep +''
            IF (@market <> '') 
                 SET @sql = @sql + ' AND'
       END    

       BEGIN
        IF (@market <>'')  
            SET @sql = @sql + ''([bptypename] = ''+ @market +''

       END

        AND datecreated >= DATEADD(month,DATEDIFF(month,0,GETDATE()) - 7,0)
        GROUP BY ROLLUP([trntypename])
        ORDER BY CASE WHEN GROUPING(trntypename) = 1 THEN 1 ELSE 0 END
    '

3 个答案:

答案 0 :(得分:0)

一种可能性是,您制作列表的副本,并删除该副本中的项目,仍然迭代“原始”(并在副本中跳过迭代器步骤)。

ListIterator itr = list.listIterator(); ListIterator itr2 = copy.listIterator();

while(itr.hasNext()&& list.size() != 1){

    if((itr.nextIndex()+1) % step == 0) {
        System.out.println(itr.previousIndex()+1);
        itr.next();
        itr2.next();
        itr2.remove();
        itr.next();
    }
    else {
            itr.next();
            itr2.next();
        }

答案 1 :(得分:0)

试试这个;

firebaseRef.on('child_added', function(childSnapshot, prevChildKey) {
  // code to handle new child.
});

答案 2 :(得分:0)

恢复你的设计逻辑!

仅使用已接受的元素构建新列表是一种非常好的方法。

删除总是难以理解和维护。

例如,你自杀的方法应该返回一个新的List&lt;&gt;用你想要的元素。

您的代码会非常简单:

List<Integer> cleanedList = new ArrayList<Integer>();
for(Integer soldier : list) {
    if(solider%3!=0){
        cleanedList.add(soldier); 
    }     
}
return cleanedList;

大多数时候我更喜欢创建新objets的API。如果您应用此规则,您的代码将始终获得更简单的代码!并且更新参数不是一个好的行为:如果您调用该方法两次,则会获得两个不同的结果。