2017-03-28 41 views
-4

我已經編寫代碼以刪除ArrayList中的所有奇數。 ?刪除ArrayList中的所有奇數編號

import java.util.*; 

public class Odd { 
    public static void main (String [] args) { 
     ArrayList <Integer> mylist = new ArrayList<>(Arrays.asList(1, 2, 4, 6, 7)); 
     System.out.println(odd(mylist)); 
    } 

    public static int odd(ArrayList<Integer> list) { 
     if (list.isEmpty()) { throw new Error(); } 
     int a = list.get(0); 
     List<Integer> toRemove = new ArrayList<>(); 

     for (int si : list) { 
      if (si % 2 != 0) { toRemove.add(si); } 
     } 

     list.removeAll(toRemove); 
     return a; 
    } 
} 

但不知何故,結果總是有人1.可指出什麼是我的錯誤預先感謝您

+9

你從列表中返回一個'int'來顯示。爲什麼該方法返回一個「int」? – Kayaman

+2

結果應該是什麼?目前,您只是返回原始列表中的第一項。 – RealSkeptic

回答

3

有兩個問題與您的代碼:

(1)您需要returnlist對象(包括整數)去除奇數

(2)爲了returnlist後,你需要從int方法簽名更改爲List<Integer>(如返回類型):

您可以參考與註釋下面的代碼:

//change the method signature to return List<Integer> 
public static List<Integer> odd(ArrayList<Integer> list) { 
     if (list.isEmpty()) { throw new Error(); } 
     List<Integer> toRemove = new ArrayList<>(); 

     for (int si : list) { 
      if (si % 2 != 0) { toRemove.add(si); } 
     } 

     list.removeAll(toRemove); 
     return list;//return list, not int 
    } 
1

檢查這一行:

int a=list.get(0); 

您正在閱讀的只有第一個元素的列表,這是1,而不是遍歷它。

使用迭代器(例如for each)或常規for循環(使用來自list的項目計數)。

+3

該程序會迭代列表。它從列表中刪除所需的項目。唯一的問題是,它與返回的結果之間沒有任何關聯。 – RealSkeptic

0

正如其他人所指出的,問題是,你回來這個:

int a = list.get(0); 

因此,你會總是得到第一個項目在列表中,不管你做什麼吧在您檢索它之後。

完全擺脫a並只是返回list將解決該問題。