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

Swift编程入门疑问:为何代码执行了错误的分支?

问题分析与解决

你的代码输出不符合预期,核心原因是Swift逻辑运算符的优先级——&&的优先级比||高,导致条件判断的逻辑和你预想的不一样。

看你的变量值:subjectOne = true,subjectTwo = false,subjectThree = 5。

第二个else if的条件是:

subjectOne || subjectTwo && subjectThree >= 10

因为&&优先级更高,会先计算subjectTwo && subjectThree >=10(结果是false && false = false),然后再算subjectOne || false,结果是true,所以这个分支被触发,输出了"Almost perfect..."。

而你想要触发的分支是else if subjectOne || subjectTwo && subjectThree < 10,同样因为优先级问题,这个条件会被解析成subjectOne || (subjectTwo && subjectThree <10),结果也是true,但因为前面的分支已经匹配到了,所以根本不会走到这里。

修正方案

给逻辑判断加上括号,明确分组逻辑,让代码按照你预想的顺序执行:

var subjectOne = true
var subjectTwo = false
var subjectThree: Int = 5

func shout(subjectOne: Bool, subjectTwo: Bool, subjectThree: Int){
    if subjectOne && subjectTwo && subjectThree >= 25 {
        print("HIGH SCORE!")
    }
    // 加上括号明确:(subjectOne 或 subjectTwo) 并且 subjectThree >=10
    else if (subjectOne || subjectTwo) && subjectThree >= 10 {
        print("Almost perfect. Give it another try!")
    }
    else if subjectOne && subjectTwo && subjectThree >= 10 {
        print("There ya' go!")
    }
    else if !subjectOne && !subjectTwo && subjectThree >= 10 {
        print("Well, you got a high enough number at least!")
    }
    // 加上括号明确:(subjectOne 或 subjectTwo) 并且 subjectThree <10
    else if (subjectOne || subjectTwo) && subjectThree < 10 {
        print("Well, you got one correct")
    }
    else if !subjectOne && !subjectTwo && subjectThree < 10 {
        print("You fail at life!")
    }
    // 加上括号明确:(subjectOne 或 subjectTwo) 并且 subjectThree >=25
    else if (subjectOne || subjectTwo) && subjectThree >= 25 {
        print("Almost a high score. Keep going, you got this!")
    }
}

shout(subjectOne: subjectOne, subjectTwo: subjectTwo, subjectThree: subjectThree)

修正后,第二个else if的条件会先判断subjectOne || subjectTwo(结果是true),再判断true && subjectThree >=10(5>=10是false,所以整个条件为false),这样就会跳过这个分支,走到你想要的(subjectOne || subjectTwo) && subjectThree <10分支,输出预期的内容。

另外,建议写条件判断时,只要涉及到||和&&混合的情况,都加上括号,不仅能避免优先级问题,还能让代码逻辑更清晰,方便自己和其他人阅读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:51:18