我有ArrayList
类型HashSet
ArrayList<HashSet<E>> array = new ArrayList<>();
每个密钥array.get(0)
都有一个HashSet
array.get(0) = [1895, 1959, 2023, 2087, 1960]
array.get(1) = [2277, 2213, 2278, 2214]
现在我想从arraylist中获取每个列表并添加它们然后取平均值。
这意味着例如
int sum = 0, avg = 0;
for(int i = 0 ; i < array.size() ; i++){
for(int j = 0 ; j < array.get(i).size() ; i++){
sum += array.get(i).get(j); // this is of course wrong
}
avg = sum / array.get(i).size();
System.out.println("avg of list " + i + "is : " + avg);
}
怎么做
我建议使用另一个类型为整数的arraylist,然后添加array.get(0)
中的数字,然后计算平均值然后清除数组,然后添加array.get(1)
中的数字,然后计算它们的平均值等等。
答案 0 :(得分:1)
如果您使用的是Java 8+,那可能会更好:
array.stream()
.mapToDouble(set ->
set.stream().mapToInt(Integer::intValue).average().orElse(0)
)
.forEach(System.out::println);
<强>输出强>
1984.8
2245.5
在您的解决方案中,您尝试使用get(index)
从HashSet获取元素,但这不正确,而是您必须使用Iterator来查看此QA,Getting an element from a Set,或者您可以像这样使用for (Integer e : array.get(i))
:
for (int i = 0; i < array.size(); i++) {
int sum = 0;
for (Integer t : array.get(i)) {
sum += t;
}
double avg = sum / array.get(i).size();
System.out.println("avg of list " + i + "is : " + avg);
}
请注意,sum和avg变量应该在每次迭代中重新赋值为0,否则你会得到错误的结果。
答案 1 :(得分:0)
这样的事情怎么样:
for(int i = 0 ; i < array.size() ; i++){
int sum = 0, avg = 0;
for(E e : array.get(i)){
sum += e;
}
avg = sum / array.get(i).size();
System.out.println("avg of list " + i + "is : " + avg); }
}
答案 2 :(得分:0)
为什么不使用每个循环,以使其更清晰?
int sum = 0, avg = 0, count = 0;
for (HashSet<Integer> set: array) {
for (Integer element: set) {
sum += element;
count++;
}
}
avg = sum/count;
答案 3 :(得分:0)
E型究竟是什么?
如果它是Integer类型,那么它将如下所示:
for(int i = 0; i < array.size(); i++)
{
int sum = 0;
for(Integer e : array.get(i))
{
sum += e;
}
double avg = sum / array.get(i).size();
System.out.println("Average of list" + i + "is : " + avg);
}