#Java集合的組內平均值的計算方法

TechSynapse發表於2024-05-23

要計算Java集合(例如ListSet中的IntegerDouble或其他數值型別的物件)的組內平均值,我們需要遍歷這個集合,累加所有的元素值,然後除以集合的大小(即元素的數量)。以下是一個詳細的步驟說明和完整的程式碼示例。

1.步驟說明

(1)建立集合:首先,我們需要一個包含數值的集合。在這個例子中,我們將使用List<Integer>

(2)初始化累加器和計數器:累加器用於儲存所有元素的總和,計數器用於跟蹤元素的數量。

(3)遍歷集合:使用for-each迴圈或其他遍歷方式遍歷集合中的每個元素。

(4)累加元素值:將每個元素的值加到累加器上。

(5)計算平均值:將累加器的值除以計數器的值,得到平均值。

(6)處理特殊情況:如果集合為空(即元素數量為0),則平均值未定義。在這種情況下,我們可能需要丟擲一個異常或返回一個特殊的值(如nullDouble.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,但在這個示例中,我們已經在方法開始時檢查了列表是否為空。

相關文章