You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

随机健身APP:按元素所属数组配置不同随机数范围

解决按动作类型分配不同随机次数范围的问题

嘿,这个需求其实挺接地气的——毕竟不同健身动作的合理次数范围确实差很多,总不能让硬拉和俯卧撑用同一个次数区间对吧?我来给你分享个简单靠谱的实现思路,用Swift来举例(毕竟你提到了arc4random):

第一步:给动作绑定专属的次数范围

与其单纯用两个数组区分,不如让每个动作自己“记住”适合的次数区间。最清晰的方式是用结构体来封装动作信息:

// 定义一个动作结构体,包含名称、最小次数、最大次数
struct Exercise {
    let name: String
    let minReps: Int
    let maxReps: Int
}

// 按类型分组定义动作数组
let highRepExercises = [
    Exercise(name: "俯卧撑", minReps: 15, maxReps: 30),
    Exercise(name: "开合跳", minReps: 20, maxReps: 40),
    Exercise(name: "卷腹", minReps: 12, maxReps: 25)
]

let standardRepExercises = [
    Exercise(name: "哑铃卧推", minReps: 8, maxReps: 12),
    Exercise(name: "硬拉", minReps: 5, maxReps: 8),
    Exercise(name: "弓步蹲", minReps: 6, maxReps: 10)
]

第二步:修改生成计划的逻辑,按动作的次数范围生成随机数

在你的「生成训练计划」函数里,先随机选动作(可以控制不同类型动作的占比),然后根据选中动作的minReps和maxReps来生成对应的随机次数:

func generateWorkoutPlan() -> [(exerciseName: String, reps: Int)] {
    var workoutPlan = [(String, Int)]()
    
    // 随机生成本次训练的动作数量,比如3-6个
    let totalExercises = Int(arc4random_uniform(4)) + 3
    
    for _ in 0..<totalExercises {
        // 随机选择动作类型:比如40%概率选高次数动作,60%选标准次数动作
        let isHighRep = arc4random_uniform(10) < 4
        let selectedExercise: Exercise
        
        // 从对应数组里随机选一个动作
        if isHighRep {
            let randomIndex = Int(arc4random_uniform(UInt32(highRepExercises.count)))
            selectedExercise = highRepExercises[randomIndex]
        } else {
            let randomIndex = Int(arc4random_uniform(UInt32(standardRepExercises.count)))
            selectedExercise = standardRepExercises[randomIndex]
        }
        
        // 生成该动作对应的随机次数
        let repsRange = selectedExercise.maxReps - selectedExercise.minReps + 1
        let randomReps = Int(arc4random_uniform(UInt32(repsRange))) + selectedExercise.minReps
        
        workoutPlan.append((selectedExercise.name, randomReps))
    }
    
    return workoutPlan
}

额外优化建议

  • 如果以后要加更多动作类型(比如低次数大重量的力量动作),直接新增对应的数组和结构体实例就行,扩展性拉满;
  • 要是不想用结构体,也可以用元组数组[(String, Int, Int)]或者字典数组,不过结构体的类型安全性更高,不容易出错;
  • 还可以给动作加个难度标签、肌肉部位等属性,以后扩展功能(比如按部位生成计划)也更方便。

这样改完,每个动作都会按照自己的合理次数范围生成随机数,完全符合你的需求啦~

内容的提问来源于stack exchange,提问作者nc14

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:29:46