Swift &&;和| |在while循环中

Swift &&;和| |在while循环中,swift,while-loop,Swift,While Loop,嗨,我对这个挑战有点小问题: 给定一个介于2和12之间的数字,使用两个六面骰子计算滚动该数字的几率。通过穷尽性地循环所有的组合并计算得到该值的结果的分数来计算它。不要使用公式 我的解决办法是: let givenNumber = 10 var cube1 = 1 var cube2 = 1 var count = 0 let allCombinations = 36 while (cube1 != 6 || cube2 != 6) { if cube1 + cube2 == give

嗨,我对这个挑战有点小问题:

给定一个介于2和12之间的数字,使用两个六面骰子计算滚动该数字的几率。通过穷尽性地循环所有的组合并计算得到该值的结果的分数来计算它。不要使用公式

我的解决办法是:

let givenNumber = 10
var cube1 = 1
var cube2 = 1
var count = 0
let allCombinations = 36

while (cube1 != 6 || cube2 != 6) {

    if cube1 + cube2 == givenNumber {
        count += 1
    }

    if cube1 != 6 {
        cube1 += 1
    } else {
       cube1 = 1
        cube2 += 1
    }
}

let probability = Double(count) / Double(allCombinations)
print(probability)
它是有效的,但我不明白为什么:)因为我相信它应该是:

while (cube1 != 6 && cube2 != 6)
只要cube1和cube2不等于6(不确定这在英语语法中是否正确,但我希望你知道我的意思),这个循环就会重复,当cube1和cube2都等于6时,应该停止。但当只有cube1等于6时,它就停止了。我以为它会用| |:/来做这件事

因为我不明白,所以我做了不同的事:

 let givenNumber = 10
    var cube1 = 1
    var cube2 = 1
    var count = 0
    let allCombinations = 36

    while true {

    if cube1 + cube2 == givenNumber {
        count += 1
    }

    if cube1 != 6 {
        cube1 += 1
    } else {
       cube1 = 1
        cube2 += 1
    }

    if cube1 == 6 && cube2 == 6 {
    break
   }
}

let probability = Double(count) / Double(allCombinations)
print(probability)
没关系,但也许你能解释一下为什么我在“while&&/| |”这个词上错了


谢谢

这是基本逻辑,让我告诉你哪里错了。这个

只要cube1和cube2不等于6,这个循环就会重复

翻译成
!(cube1==6&&cube2==6)
(cube1!=6&&cube2!=6)

可以使用(德摩根定律)减少前者,以获得原始表达式:

!(cube1 == 6 && cube2 == 6)
!(cube1 == 6) || !(cube2 == 6)
cube1 != 6 || cube2 != 6

为马拉卡的回答添加一点自然语言解释(这是绝对正确的,把我的答案看作是他的回答的延伸):

表示“在这两个条件都为真时执行”,因此,一旦这两个条件中的任何一个为假,评估将停止。即当
cube1
首次达到
6

另一方面

while (cube1 != 6 || cube2 != 6)

意思是:尽管这两种说法中的任何一种都是正确的,但要坚持下去。我们可以将其重新表述为“仅当这两个都为false时停止”,即“当
cube1
cube2
都达到
6
时停止”,这正是我们所需要的。

尝试使用嵌套的
进行
循环<代码>对于1…6中的cube1{对于1…6中的cube2{如果cube1+cube2==…}
。这是来自swift课程手册的挑战,
对于
循环在下一章:)啊,好的。相信我,你会爱上他们的。对,语言在我看来是非常重要的,重新表述问题是解决问题的第一步。第二个是不是意味着这两个都是真的继续?当它们都为false时,即当cube1和cube2都为6时,您停止操作。@vacawama,谢谢!我很困惑,因为
=。在我的脑海里,它听起来像是“而
cube1等于6
是假的”,因此,由于双重否定,我在答案的第二部分混淆了
true
/
false
。我非常感谢你指出这一点,我已经编辑了答案。
while (cube1 != 6 || cube2 != 6)