面试题答案
一键面试import java.util.List;
public class Main {
public static double calculateAverage(List<? extends Number> numbers) {
if (numbers == null || numbers.isEmpty()) {
throw new IllegalArgumentException("集合不能为空");
}
double sum = 0;
for (Number number : numbers) {
sum += number.doubleValue();
}
return sum / numbers.size();
}
}
你可以使用如下方式调用这个方法:
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<Double> doubleList = new ArrayList<>();
doubleList.add(1.0);
doubleList.add(2.0);
doubleList.add(3.0);
double average = Main.calculateAverage(doubleList);
System.out.println("平均值: " + average);
}
}
在上述代码中:
calculateAverage
方法接受一个List<? extends Number>
类型的参数,表示这个List
可以存放Number
及其子类类型的元素。- 首先检查集合是否为空,如果为空则抛出
IllegalArgumentException
异常。 - 遍历集合,通过
number.doubleValue()
方法将每个Number
对象转换为double
类型并累加。 - 最后返回总和除以元素个数得到的平均值。
在 main
方法中,创建一个 List<Double>
并添加一些元素,然后调用 calculateAverage
方法并输出结果。
如果你使用的是其他编程语言,实现思路类似,下面以Python为例:
from typing import List, Union
Number = Union[int, float]
def calculate_average(numbers: List[Number]) -> float:
if not numbers:
raise ValueError("集合不能为空")
total = sum(numbers)
return total / len(numbers)
double_list = [1.0, 2.0, 3.0]
average = calculate_average(double_list)
print("平均值:", average)
在Python代码中:
- 定义了一个
Number
类型别名,表示可以是int
或float
类型。 calculate_average
函数接受一个List[Number]
类型的参数,同样先检查列表是否为空,然后使用sum
函数计算总和并返回平均值。- 创建一个浮点数列表并调用函数输出平均值。