2013-08-23 199 views
-4

如何從整數列表中刪除偶數元素?從列表中刪除偶數元素

List dropEven(List l, int n) { 
    List to_return = nil(); 
    while(true) { 
     if(l.isEmpty()) return to_return; 
     if(n==0) l.remove(n); 
     Integer i = (Integer)(hd(l)); 
     to_return=append1(to_return,hd(l)); 
     n= n-1; 
     l=tl(l); 
    } 
} 
+0

除了第一行的問題之外,您的代碼是否存在任何問題?它會拋出任何異常嗎?或者它給了意想不到的輸出你需要告訴我們。 –

+0

這就是我一直在使用,但它似乎並沒有工作。所以我想知道我是否缺少一些東西。 @RohitJain – user2709092

+0

似乎不起作用,對於具體問題從來都不是一個很好的解釋。你需要告訴我們它是如何工作的。你在運行這個代碼時得到了什麼輸出? –

回答

2

用戶一個迭代器並取出偶數值

Iterator i = l.iterator; 
int counter = 0; 
while(i.hasNext()){ 
i.next(); 
if (counter%2 == 0) 
i.remove(); 
counter++; 
} 
+0

此代碼導致java.lang.IllegalStateException,猜測爲什麼 –

+0

如果您使用的是ArrayList,則不應該給IllegalStateException –

+0

[迭代器規範](http://docs.oracle.com/javase/7/docs/api/ java/util/Iterator.html#remove%28%29)在List實現之間不會改變,它說它會導致IllegalStateException –

0

下面是如何僅奇數複製到一個新的列表,並將其返回清潔版本:

List dropEven(List list) { 
    List toReturn = new ArrayList(); 
    for (int i = 0; i < list.size(); i++) { 
     if(((int)list.get(i)) % 2 != 0) { 
      toReturn.add(list.get(i)); 
     } 
    } 
    return toReturn; 
} 
+0

1)這甚至沒有編譯。 2)當'l'不爲空時,這將拋出'NullPointerException'。 3)從返回'Collection'的方法返回'null'是一個糟糕的主意。 4)從不使用'n'。 – DannyMo

+0

@DannyMo我修復了代碼。它很髒的原因是因爲我試圖儘可能接近OP的代碼,所以我複製並修改了它。 –

0

使用迭代器,它是刪除項目的刪除方法。你可以使用布爾值來跟蹤偶數/奇數,不知道爲什麼你會使用計數器。

System.out.println(Arrays.toString(list.toArray())); 
    boolean even = false; 
    for (Iterator iterator = list.iterator(); iterator.hasNext(); even = !even) { 
     iterator.next(); 
     if(even) iterator.remove(); 
    } 
    System.out.println(Arrays.toString(list.toArray()));