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

Swift中使用while循环与字典实现daysPastThisYear函数报错求助

Swift函数daysPastThisYear修正方案

需求说明

我是编程新手,需要实现Swift函数daysPastThisYear,该函数接收月份名称(如"May")和日期(如12)作为参数,忽略闰年,利用给定的monthNames数组与monthDays字典,通过while循环计算并返回年初至该日期的天数。

示例要求:

print(daysPastThisYear(month: "January", day: 12))
// 输出12

原代码存在的问题

  1. 函数参数定义错误:原函数接收monthNames和monthDays作为参数,但实际需要的是month和day,这两个常量应该放在函数内部
  2. 未声明关键变量:month、day、totalDays都没有定义,导致编译失败
  3. 语法错误:Swift中自增是i += 1而非i ++;-= i是无效写法,应该是i -= 1
  4. 字典取值错误:用索引i-1直接取字典值,字典是键值对结构,需要用月份名称作为键
  5. 逻辑错误:第二个while循环内重复累加日期,且没有正确返回计算结果
  6. 闰年处理错误:需求要求忽略闰年,二月天数应为28而非29

修正后的代码

func daysPastThisYear(month: String, day: Int) -> Int {
    // 定义月份名称数组和对应天数字典(忽略闰年)
    let monthNames = ["January", "February", "March", "April", "May", "June", 
                      "July", "August", "September", "October", "November", "December"]
    let monthDays = ["January": 31, "February": 28, "March": 31, "April": 30, 
                     "May": 31, "June": 30, "July": 31, "August": 31, 
                     "September": 30, "October": 31, "November": 30, "December": 31]
    
    var currentIndex = 0
    // 用while循环找到目标月份在数组中的索引
    while monthNames[currentIndex] != month {
        currentIndex += 1
    }
    
    var totalDays = 0
    var indexToAdd = 0
    // 用while循环累加目标月份之前所有月份的天数
    while indexToAdd < currentIndex {
        totalDays += monthDays[monthNames[indexToAdd]]!
        indexToAdd += 1
    }
    // 加上当前月份的日期
    totalDays += day
    
    return totalDays
}

// 测试示例
print(daysPastThisYear(month: "January", day: 12)) // 输出12
print(daysPastThisYear(month: "May", day: 12)) // 输出31+28+31+30+12=132

代码解释

  1. 修正函数参数:改为接收month(月份名称)和day(日期)作为输入
  2. 调整二月天数为28,符合忽略闰年的要求
  3. 第一个while循环:遍历monthNames数组,找到目标月份对应的索引位置
  4. 第二个while循环:累加目标月份之前所有月份的总天数
  5. 最后加上当前月份的日期,得到从年初到该日期的总天数,返回结果
  6. 修复所有语法错误,保证变量都正确声明

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:25:21