这个java案例显示体能消耗数据差异?

wen java案例 11

本文目录导读:

这个java案例显示体能消耗数据差异?

  1. 关键差异分析:
  2. 实际输出示例:

我来帮你分析一个Java案例,展示体能消耗数据差异的示例,这里我创建一个完整的示例,展示不同运动类型的体能消耗对比:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
// 运动数据类型
class ExerciseData {
    private String exerciseType;
    private int durationMinutes;
    private double caloriesBurned;
    private int heartRate;
    private LocalDateTime timestamp;
    public ExerciseData(String exerciseType, int durationMinutes, double caloriesBurned, int heartRate) {
        this.exerciseType = exerciseType;
        this.durationMinutes = durationMinutes;
        this.caloriesBurned = caloriesBurned;
        this.heartRate = heartRate;
        this.timestamp = LocalDateTime.now();
    }
    // Getters
    public String getExerciseType() { return exerciseType; }
    public int getDurationMinutes() { return durationMinutes; }
    public double getCaloriesBurned() { return caloriesBurned; }
    public int getHeartRate() { return heartRate; }
    public LocalDateTime getTimestamp() { return timestamp; }
}
// 体能消耗数据分析器
class EnergyExpenditureAnalyzer {
    // 计算卡路里消耗(不同运动类型的MET值不同)
    public static double calculateCalories(int metValue, int weightKg, int durationMinutes) {
        // 卡路里公式:MET * 3.5 * 体重(kg) / 200 * 时间(分钟)
        return (metValue * 3.5 * weightKg / 200) * durationMinutes;
    }
    // 分析不同运动类型的热量消耗差异
    public static Map<String, Double> analyzeExerciseDifferences() {
        Map<String, Double> exerciseData = new HashMap<>();
        // 模拟不同运动类型的数据(MET值)
        exerciseData.put("跑步(8km/h)", 8.0);
        exerciseData.put("游泳(中等强度)", 7.0);
        exerciseData.put("骑车(中等强度)", 6.0);
        exerciseData.put("瑜伽", 2.5);
        exerciseData.put("散步", 3.0);
        exerciseData.put("力量训练", 3.5);
        exerciseData.put("篮球", 6.5);
        exerciseData.put("足球", 7.5);
        return exerciseData;
    }
    // 模拟用户的运动数据
    public static List<ExerciseData> simulateUserExercises() {
        List<ExerciseData> exercises = new ArrayList<>();
        // 创建示例数据
        exercises.add(new ExerciseData("跑步", 30, 320.5, 145));
        exercises.add(new ExerciseData("游泳", 30, 280.3, 132));
        exercises.add(new ExerciseData("瑜伽", 30, 100.2, 85));
        exercises.add(new ExerciseData("散步", 30, 120.0, 92));
        exercises.add(new ExerciseData("力量训练", 30, 180.5, 128));
        exercises.add(new ExerciseData("篮球", 30, 260.8, 142));
        return exercises;
    }
    // 比较不同运动的数据差异
    public static void compareExerciseData(List<ExerciseData> exercises) {
        System.out.println("========== 不同运动体能消耗对比 ==========\n");
        System.out.println("运动类型\t时长(分钟)\t消耗卡路里\t平均心率");
        System.out.println("----------------------------------------------------");
        // 找出最高和最低消耗
        ExerciseData maxCalorie = exercises.get(0);
        ExerciseData minCalorie = exercises.get(0);
        double totalCalories = 0;
        for (ExerciseData exercise : exercises) {
            System.out.printf("%-10s\t%-10d\t%-12.1f\t%d 次/分\n", 
                exercise.getExerciseType(), 
                exercise.getDurationMinutes(),
                exercise.getCaloriesBurned(),
                exercise.getHeartRate());
            totalCalories += exercise.getCaloriesBurned();
            if (exercise.getCaloriesBurned() > maxCalorie.getCaloriesBurned()) {
                maxCalorie = exercise;
            }
            if (exercise.getCaloriesBurned() < minCalorie.getCaloriesBurned()) {
                minCalorie = exercise;
            }
        }
        double averageCalories = totalCalories / exercises.size();
        System.out.println("\n========== 数据分析 ==========");
        System.out.printf("总消耗热量: %.1f 卡路里\n", totalCalories);
        System.out.printf("平均消耗热量: %.1f 卡路里\n", averageCalories);
        System.out.printf("最高消耗运动: %s (%.1f 卡路里)\n", 
            maxCalorie.getExerciseType(), maxCalorie.getCaloriesBurned());
        System.out.printf("最低消耗运动: %s (%.1f 卡路里)\n", 
            minCalorie.getExerciseType(), minCalorie.getCaloriesBurned());
        // 计算差异百分比
        double difference = maxCalorie.getCaloriesBurned() - minCalorie.getCaloriesBurned();
        double differencePercent = (difference / minCalorie.getCaloriesBurned()) * 100;
        System.out.printf("最高与最低消耗差异: %.1f 卡路里 (%.1f%%)\n", 
            difference, differencePercent);
    }
    // 按MET值计算理论消耗
    public static void analyzeMetDifferences() {
        System.out.println("\n========== 按MET值计算的消耗差异(体重70kg,运动30分钟) ==========\n");
        System.out.println("运动类型\t\tMET值\t理论消耗(卡路里)");
        System.out.println("----------------------------------------------------");
        Map<String, Double> exercises = analyzeExerciseDifferences();
        int weightKg = 70;
        int durationMinutes = 30;
        exercises.entrySet().stream()
            .sorted(Map.Entry.<String, Double>comparingByValue().reversed())
            .forEach(entry -> {
                double calories = calculateCalories(entry.getValue().intValue(), weightKg, durationMinutes);
                System.out.printf("%-20s\t%-8.1f\t%.1f\n", 
                    entry.getKey(), entry.getValue(), calories);
            });
    }
    // 计算心率与消耗的关系
    public static void analyzeHeartRateImpact(List<ExerciseData> exercises) {
        System.out.println("\n========== 心率与热量消耗关系 ==========\n");
        // 按心率排序
        exercises.sort((e1, e2) -> Integer.compare(e2.getHeartRate(), e1.getHeartRate()));
        for (ExerciseData exercise : exercises) {
            double caloriesPerMinute = exercise.getCaloriesBurned() / exercise.getDurationMinutes();
            System.out.printf("%s: 心率 %d 次/分, 每分钟消耗 %.2f 卡路里\n",
                exercise.getExerciseType(), 
                exercise.getHeartRate(),
                caloriesPerMinute);
        }
    }
}
// 主测试类
public class EnergyExpenditureDemo {
    public static void main(String[] args) {
        // 创建分析器实例
        EnergyExpenditureAnalyzer analyzer = new EnergyExpenditureAnalyzer();
        // 模拟用户运动数据
        List<ExerciseData> userExercises = EnergyExpenditureAnalyzer.simulateUserExercises();
        // 1. 比较实际运动数据
        EnergyExpenditureAnalyzer.compareExerciseData(userExercises);
        // 2. 分析MET值差异
        EnergyExpenditureAnalyzer.analyzeMetDifferences();
        // 3. 分析心率影响
        EnergyExpenditureAnalyzer.analyzeHeartRateImpact(userExercises);
        // 4. 额外:计算BMI影响
        calculateBMIImpact();
    }
    // 额外功能:计算BMI对消耗的影响
    private static void calculateBMIImpact() {
        System.out.println("\n========== BMI对热量消耗的影响 ==========\n");
        int[] weights = {60, 70, 80, 90, 100};
        int duration = 30;
        int metValue = 8; // 跑步
        System.out.println("体重(kg)\tBMI(175cm)\t30分钟消耗(卡路里)");
        System.out.println("--------------------------------------");
        for (int weight : weights) {
            double bmi = weight / Math.pow(1.75, 2);
            double calories = EnergyExpenditureAnalyzer.calculateCalories(metValue, weight, duration);
            System.out.printf("%-10d\t%-10.2f\t%.1f\n", weight, bmi, calories);
        }
    }
}

这个案例展示了体能消耗数据的显著差异,主要特点包括:

关键差异分析:

  1. 运动类型差异

    • 高强度运动(跑步、游泳)消耗大
    • 低强度运动(瑜伽、散步)消耗较小
    • 运动量差异可达3-4倍
  2. 心率与消耗关系

    • 心率越高,单位时间消耗越大
    • 跑步心率最高,消耗最大
  3. 体重影响

    • 相同运动,体重越大消耗越多
    • 体重差异导致热量消耗差异可达40-50%
  4. MET值对比

    • 不同运动MET值差距大(2.5-8.0)
    • 直接影响卡路里计算

实际输出示例:

跑步: 320.5 卡路里
游泳: 280.3 卡路里
瑜伽: 100.2 卡路里

差异清晰可见:跑步消耗是瑜伽的3倍多。

这个案例科学地展示了不同类型运动的体能消耗差异,可作为运动计划制定的参考依据。

抱歉,评论功能暂时关闭!