c
и d
никогда не обновляются в вашем коде. Так что, если при первом выстреле вы не получите a
и b
правильно, вы попадете в бесконечный цикл. Вы можете исправить это, обновив их внутри цикла while. Или, может быть, вы думаете о c
и d
как функциях, которые вычисляются всякий раз, когда a
и b
изменяются:
var a = Int.random(in: 10...100)
var b = Int.random(in: 10...100)
var c: () -> Int = { a % 10 }
var d: () -> Int = { b % 10 }
while c() + d() > 10 {
a = Int.random(in: 10...100)
b = Int.random(in: 10...100)
}
Вы также можете сгенерировать b
таким образом, что вы всегда будете уверены, что сумма модов меньше или равна 10:
var a = Int.random(in: 10 ... 100)
var b = Int.random(in: 1 ... 9) * 10 + Int.random(in: 0 ... 10 - a % 10)
С этим выражением b
будет принимать значения от 10 до 99, а не 100. Чтобы настроить верхнюю границу, вы можете определить b
следующим образом:
var b = Int.random(in: 1 ... 10) * 10
b += b == 100 ? 0 : Int.random(in: 0 ... 10 - a % 10)