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

Swift中用于打印星期的switch case代码异常,求问题排查

你的Switch-Case星期打印代码问题排查与修复

嘿,我来帮你看看这段Swift代码的问题哈!你的代码里有几个关键问题导致功能没正常工作,我逐个给你拆解:

问题1:Switch的判断对象写错了

你在switch语句里写的是switch dayOfTheWeek,但dayOfTheWeek是你定义的函数名,不是要判断的参数!正确的应该是用传入的day参数来做判断,也就是switch day。

问题2:区间逻辑有漏洞

你用的..<2这类半开区间会导致匹配范围混乱:比如第一个case..<2会匹配0和1,而第二个case..<3其实能匹配0、1、2,但因为switch是从上到下匹配,一旦第一个case命中就不会往下走了,所以只有0、1会输出Monday,2输出Tuesday...但这显然和你想实现的“数字对应星期”逻辑不符,而且0这个数字也不该对应星期对吧?

问题3:函数依赖外部变量,不够健壮

你的函数里直接打印了外部的aNumber,但函数本身已经接收了day参数,应该基于传入的day来处理,而不是依赖外部变量,这样函数的复用性会很差,比如你想传入其他数字测试都不方便。

问题4:随机数范围不合理

你生成的是0...10的随机数,但星期对应的数字应该是1-7(或者0-6),超出这个范围的数字都会走到default的Error分支,没必要生成这么大的范围。


修复后的代码示例

这里我给你两种常见的实现方式,你可以根据需求选:

方式1:数字1-7对应周一到周日

// 生成1-7的随机数,对应周一到周日
var aNumber = Int.random(in: 1...7)

func dayOfTheWeek(day: Int) {
    switch day {
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    default:
        print("Error: 输入的数字不在1-7范围内")
    }
    // 打印传入的数字,用参数day而不是外部变量
    print("传入的数字是: \(day)")
}

dayOfTheWeek(day: aNumber)

方式2:数字0-6对应周一到周日

如果习惯用0作为起始索引,可以用这个版本:

// 生成0-6的随机数,对应周一到周日
var aNumber = Int.random(in: 0...6)

func dayOfTheWeek(day: Int) {
    switch day {
    case 0:
        print("Monday")
    case 1:
        print("Tuesday")
    case 2:
        print("Wednesday")
    case 3:
        print("Thursday")
    case 4:
        print("Friday")
    case 5:
        print("Saturday")
    case 6:
        print("Sunday")
    default:
        print("Error: 输入的数字不在0-6范围内")
    }
    print("传入的数字是: \(day)")
}

dayOfTheWeek(day: aNumber)

这样修改后,你的代码就能正常根据输入的数字打印对应的星期啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:07:34