2012-02-16 39 views
3

我正在创建一个方法来获取数组的所有偶数的平均值。Arraylist到整数数组,不能得到它的工作(Java)!

如何将arraylist对象(evens)转换为数组,所以我可以总结它们?

public static double percentEven(int[]a) 
    { 
    ArrayList evens = new ArrayList(); 
    int evenSum = 0; 


    for (int counter = 0;counter < a.length;counter++) 
    { 
     if ((a[counter]%2) == 0)  
     evens.add(a[counter]); 
    }  

    int[] evenReturned = new int[evens.size()]; 
    evens.toArray(evenReturned); 

    int evensCount = 0; 
    for (evensCount = 0;evensCount < evens.size();evensCount++) 
    { 
     evenSum += evenReturned[evensCount]; 
    }  


    return evenSum/evensCount; 

    }  
+1

你为什么要将它转换为数组,有没有必要这样做?你可以从ArrayList中将它们总结得很好。 – Yuushi 2012-02-16 05:27:30

+1

为什么不直接对数组进行平均?只需保持偶数元素的总数和数量。添加结束返回'sum/count'。顺便说一句,最后一部分是你现在也忘记的东西。 – jackrabbit 2012-02-16 05:28:33

+0

在旁边,请注意,您如何正确地将数组列表转换为数组? – pood 2012-02-16 05:45:39

回答

7

你为什么要收集它们?只需将它们相加!

int evensCount = 0; 
int evenSum = 0; 
for (int counter = 0; counter < a.length; counter++) { 
    if (a[counter] % 2 == 0) { 
     evensCount++; 
     evenSum += a[counter]; 
    } 
} 

return evenSum/evensCount; 
+0

哈哈,我迟到了*手掌面对* – pood 2012-02-16 05:43:46

1

如果要总结起来,然后只使用一个专门的for循环要经过在唇上ArrayList中的每个元素,例如

for (int e : evens) 
{ 
    evenSum += e; 
} 

return evenSum/evensCount; 
1

你只需要做到这一点

if ((a[counter]%2) == 0) { 
    evenCount++ ; 
    evens.add(a[counter]); // required only if you want an array of even numbers 
    evenSum += a[counter] ; 
} 
... 
... 
return evenSum/evenCount ; 
2

虽然你并不需要在这里做,但要的ArrayList转换成数组做到这一点:

List<T> list = new ArrayList<T>(); 
T [] yourArray = list.toArray(new T[list.size()]);