Swift中使用while循环与字典实现daysPastThisYear函数报错求助
Swift函数daysPastThisYear修正方案
需求说明
我是编程新手,需要实现Swift函数daysPastThisYear,该函数接收月份名称(如"May")和日期(如12)作为参数,忽略闰年,利用给定的monthNames数组与monthDays字典,通过while循环计算并返回年初至该日期的天数。
示例要求:
print(daysPastThisYear(month: "January", day: 12)) // 输出12
原代码存在的问题
- 函数参数定义错误:原函数接收
monthNames和monthDays作为参数,但实际需要的是month和day,这两个常量应该放在函数内部 - 未声明关键变量:
month、day、totalDays都没有定义,导致编译失败 - 语法错误:Swift中自增是
i += 1而非i ++;-= i是无效写法,应该是i -= 1 - 字典取值错误:用索引
i-1直接取字典值,字典是键值对结构,需要用月份名称作为键 - 逻辑错误:第二个while循环内重复累加日期,且没有正确返回计算结果
- 闰年处理错误:需求要求忽略闰年,二月天数应为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
代码解释
- 修正函数参数:改为接收
month(月份名称)和day(日期)作为输入 - 调整二月天数为28,符合忽略闰年的要求
- 第一个while循环:遍历
monthNames数组,找到目标月份对应的索引位置 - 第二个while循环:累加目标月份之前所有月份的总天数
- 最后加上当前月份的日期,得到从年初到该日期的总天数,返回结果
- 修复所有语法错误,保证变量都正确声明
内容的提问来源于stack exchange,提问作者tyoung1385
相关产品推荐
相关产品推荐

