如何在 Java 中的通用 class 数字中找到数字的平均值?
How to find the average of numbers in a generic class of Numbers in Java?
我创建了一个通用的 class,它创建了 Numbers
的 ArrayList
public class MyMathClass<T extends Number> {
private ArrayList<T> myarraylist;
public MyMathClass(ArrayList<T> arrayList){
myarraylist = arrayList;
}
我试图创建一个基本上计算给定 ArrayList 的平均值的方法
public double average(){
var average = 0;
for(int i = 0 ; i <= myarraylist.size(); i++){
average += myarraylist.get(i);
}
}
但是当尝试将平均值与索引 i 处的值相加时,我收到此错误:“运算符 + 不能应用于 'int' ,'T'
相对于未装箱类型和盒装类型。
参考这里了解更多详情:What does it mean to say a type is "boxed"?
要使您的代码正常工作,只需将 Number 转换为 double 并对其求和。
Number num = myarraylist.get(i);
average += num == null ? 0 : num.doubleValue();
Number
对象实现了 doubleValue()
方法。 Return 平均数:
public double average() {
return myarraylist.stream().mapToDouble(Number::doubleValue).average().orElse(0);
}
orElse(0)
处理列表为空。
风格说明:尽可能使用抽象类型,所以更喜欢:
private List<T> myList;
public MyMathClass(List<T> list){
myList = list;
}
我创建了一个通用的 class,它创建了 Numbers
ArrayList
public class MyMathClass<T extends Number> {
private ArrayList<T> myarraylist;
public MyMathClass(ArrayList<T> arrayList){
myarraylist = arrayList;
}
我试图创建一个基本上计算给定 ArrayList 的平均值的方法
public double average(){
var average = 0;
for(int i = 0 ; i <= myarraylist.size(); i++){
average += myarraylist.get(i);
}
}
但是当尝试将平均值与索引 i 处的值相加时,我收到此错误:“运算符 + 不能应用于 'int' ,'T'
相对于未装箱类型和盒装类型。
参考这里了解更多详情:What does it mean to say a type is "boxed"?
要使您的代码正常工作,只需将 Number 转换为 double 并对其求和。
Number num = myarraylist.get(i);
average += num == null ? 0 : num.doubleValue();
Number
对象实现了 doubleValue()
方法。 Return 平均数:
public double average() {
return myarraylist.stream().mapToDouble(Number::doubleValue).average().orElse(0);
}
orElse(0)
处理列表为空。
风格说明:尽可能使用抽象类型,所以更喜欢:
private List<T> myList;
public MyMathClass(List<T> list){
myList = list;
}