要計算Java集合(例如List
或Set
中的Integer
、Double
或其他數值型別的物件)的組內平均值,我們需要遍歷這個集合,累加所有的元素值,然後除以集合的大小(即元素的數量)。以下是一個詳細的步驟說明和完整的程式碼示例。
1.步驟說明
(1)建立集合:首先,我們需要一個包含數值的集合。在這個例子中,我們將使用List<Integer>
。
(2)初始化累加器和計數器:累加器用於儲存所有元素的總和,計數器用於跟蹤元素的數量。
(3)遍歷集合:使用for-each迴圈或其他遍歷方式遍歷集合中的每個元素。
(4)累加元素值:將每個元素的值加到累加器上。
(5)計算平均值:將累加器的值除以計數器的值,得到平均值。
(6)處理特殊情況:如果集合為空(即元素數量為0),則平均值未定義。在這種情況下,我們可能需要丟擲一個異常或返回一個特殊的值(如null
或Double.NaN
)。
2.程式碼示例
2.1程式碼示例一
import java.util.ArrayList;
import java.util.List;
public class AverageCalculator {
public static double calculateAverage(List<Integer> numbers) {
if (numbers == null || numbers.isEmpty()) {
throw new IllegalArgumentException("List of numbers must not be null or empty");
}
int sum = 0;
for (int number : numbers) {
sum += number;
}
return (double) sum / numbers.size();
}
public static void main(String[] args) {
List<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
try {
double average = calculateAverage(numbers);
System.out.println("The average is: " + average);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
在這個示例中,calculateAverage
方法接受一個List<Integer>
作為引數,並返回該列表中數字的平均值。如果列表為空或null
,則丟擲一個IllegalArgumentException
。在main
方法中,我們建立了一個包含三個數字的列表,並呼叫了calculateAverage
方法來計算平均值。
2.2程式碼示例二
除了之前提到的直接遍歷集合並累加元素值的方法,我們還可以使用Java引入的流(Stream)API來計算集合的組內平均值。這是一個更現代且簡潔的寫法。
以下是一個使用Java Stream API計算List<Integer>
中數值平均值的程式碼示例:
import java.util.Arrays;
import java.util.List;
import java.util.OptionalDouble;
public class AverageCalculator {
public static double calculateAverage(List<Integer> numbers) {
// 確保列表不為空
if (numbers == null || numbers.isEmpty()) {
throw new IllegalArgumentException("List of numbers must not be null or empty");
}
// 使用Java Stream API計算平均值
OptionalDouble average = numbers.stream()
.mapToDouble(Integer::doubleValue) // 將Integer轉換為double
.average(); // 計算平均值
// 因為average()方法返回一個OptionalDouble,所以我們需要呼叫getAsDouble()來獲取值
// 或者我們可以使用ifPresent()來處理平均值可能不存在的情況(但在這裡我們已知列表不為空)
return average.getAsDouble();
}
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(10, 20, 30);
try {
double average = calculateAverage(numbers);
System.out.println("The average is: " + average);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
在這個示例中,我們使用了stream()
方法將List<Integer>
轉換為流(Stream),然後呼叫mapToDouble()
方法將流中的Integer
元素轉換為double
型別,接著使用average()
方法計算平均值。由於average()
方法返回一個OptionalDouble
物件(它表示一個可能不存在的double
值),我們需要呼叫getAsDouble()
方法來獲取平均值。如果列表為空,average()
方法將返回一個空的OptionalDouble
,但在這個示例中,我們已經在方法開始時檢查了列表是否為空。