donc mon objectif dans ce codebit est de lancer deux dés au hasard et comme nous le savons tous, votre dé régulier n'a que 6 faces, j'ai donc importé Foundation pour accéder à arc4random_uniform (UInt32). J'ai essayé d'utiliser la plage de (1..7) pour éviter d'obtenir au hasard 0, mais cela a renvoyé une erreur que je n'ai pas trop appréciée. J'ai essayé de faire ceci:
dice1 = arc4random_uniform(UInt32(1..7))
mais qui est revenu
Impossible de trouver une surcharge pour 'init' qui accepte les arguments fournis
J'espère que ce sont suffisamment d'informations pour que vous puissiez m'aider :)
Veuillez noter que je ne fais cela que dans une aire de jeux pour pratiquer le swift. Il n'est pas impératif que j'apprenne à faire cela; je ne fais que bricoler avant de me lancer dans la création d'applications réelles: D
//imports random number function
import Foundation
//creates data storage for dice roll
var dice1: UInt32 = 0
var dice2: UInt32 = 0
//counter variable
var i = 0
//how many times snake eyes happens
var snakeeyes = 0
//how many times a double is rolled
var `double` = 0
//rolls dice 100 times
while i < 100{
//from here
//sets dice roll
Cela renvoie une erreur de 'Range $ T3' n'est pas convertible en UInt32
dice1 = arc4random_uniform(1..7) dice2 = arc4random_uniform(1..7)
//checks for snake eyes
if dice1 == 1 && dice2 == 1 {
snakeeyes = snakeeyes + 1
}
//checks for doubles
if dice1 == dice2{
`double` = `double` + 1
}
//increases counter
i = i + 1
//to here
}
println("You got Snake Eyes \(snakeeyes) times.")
println("You got Doubles, \(`double`) times.")
la source
dice1 = arc4random_uniform(6) + 1
pour obtenir la plage 1 - 6. Je ne fais pas d'objectif iOS C et je n'ai aucune connaissance du langage rapide. La méthode aléatoire devrait vous renvoyer 0 - 5, et + 1 sera 1 - 6.u_int32_t arc4random_uniform(u_int32_t upper_bound);
Réponses:
Je crois que tu devrais faire
pour obtenir la gamme 1 - 6. Je ne fais pas d'objectif C d'iOS et je n'ai aucune connaissance du langage rapide. La méthode aléatoire doit renvoyer une valeur comprise entre 0 et 5, et + 1 en fera une valeur comprise entre 1 et 6.
Si vous avez besoin d'une plage entre 10 et 30, disons
la source
J'ai fait une extension de type Int. testé dans la cour de récréation, j'espère que cela est utile. Il accepte également les plages négatives:
utiliser comme
ou définissez-le comme une extension de plage en tant que propriété comme ceci:
la source
Quelques bonnes réponses, mais je voulais juste partager ma fonction de génération de nombres aléatoires Swift préférée pour les entiers positifs:
Swift 2
Swift 3
Voici une mise à jour rapide pour Swift 3 et, en prime, elle fonctionne désormais pour tout type de valeur conforme au protocole SignedInteger - beaucoup plus pratique pour les applications de données de base qui doivent spécifier Int16, Int32, etc. En bref, si vous vraiment besoin qu'il fonctionne également sur des entiers non signés, copiez simplement la fonction entière puis remplacez-la
SignedInteger
parUnsignedInteger
ettoIntMax()
partoUIntMax()
.Swift 4
Grâce à la suppression de toIntMax () dans Swift 4, nous devons maintenant utiliser un autre moyen de conversion en un type entier commun. Dans cet exemple, j'utilise Int64 qui est assez grand pour mes besoins, mais si vous utilisez des entiers non signés ou si vous avez un type personnalisé Int128 ou Int256, vous devez les utiliser.
Encore un, pour le total random-phile, voici une extension qui retourne un élément aléatoire de n'importe quel
Collection
objet de type. Notez que cela utilise la fonction ci-dessus pour générer son index, vous aurez donc besoin des deux.Usage
renvoie un nombre aléatoire compris entre 1 et 6.
renvoie un nombre compris entre 50 et 100 inclus. Naturellement, vous pouvez remplacer les valeurs de 50 et 100 par ce que vous voulez.
Swift 4.2
Hélas, ma meilleure réponse StackOverflow a enfin été rendue obsolète. Vous pouvez maintenant l'utiliser simplement
Int.random(in: 1 ... 6)
pour générer un nombre aléatoire dans une plage donnée. Fonctionne également pour d'autres formes de nombres entiers et flottants. Types de collecte fournissent également maintenantshuffle()
etrandomElement()
fonctions. Il n'y a donc plus besoin de fonctions de randomisation sophistiquées à moins que vous ne souhaitiez utiliser un type de randomiseur spécifique.la source
randomNumber(-3 ... -1)
fonctionne tant que vous avez des espaces avant et après le...
. Vous pouvez également utiliserrandom(-3 ..< -1
pour exclure le dernier numéro.ClosedInterval
plutôt queRange
si vous souhaitez que cela fonctionne avec des non-entiers.Selon Swift 4.2, il est maintenant facile d'obtenir un nombre aléatoire comme celui-ci
pour plus de détails, consultez ceci
la source
Si vous voulez, je crée cela pour des nombres aléatoires. c'est l'extension du nombre Int et Double, Float
UTILISATION :
la source
Swift 3/4:
la source
C'est parce que arc4random_uniform () est défini comme suit:
Il prend un UInt32 comme entrée et crache un UInt32. Vous essayez de lui transmettre une plage de valeurs. arc4random_uniform vous donne un nombre aléatoire entre 0 et et le nombre que vous passez (exclusivement), donc si par exemple, vous vouliez trouver un nombre aléatoire entre -50 et 50, comme dans
[-50, 50]
vous pourriez utiliserarc4random_uniform(101) - 50
la source
J'ai modifié la réponse de @DaRk -_- D0G pour travailler avec Swift 2.0
la source
Rapide:
la source
En rapide ...
Ceci est inclusif, l'appel
random(1,2)
renverra un 1 ou un 2, cela fonctionnera également avec des nombres négatifs.la source
La réponse est juste un code de ligne:
La solution alternative est:
Bien que l'inconvénient soit que le nombre ne peut pas commencer à partir de 0.
la source
Depuis Swift 4.2:
Utilisé comme:
la source
Edit: Swift 4.2+ fournit ceci maintenant:
C'est idiomatique pour moi d'étendre
Range
:Utilisé:
la source
C
. S'amuser!J'ai réussi à créer un nombre aléatoire en utilisant le code suivant:
J'espère que cela peut vous aider.
la source
Solution Swift 3 Xcode Beta 5. Basé sur la réponse de Ted van Gaalen.
la source
var rangeFromLimits = arc4random_uniform ((UPPerBound - LOWerBound) + 1)) + LOWerBound;
la source
espérons que cela fonctionne. créer un nombre aléatoire entre la plage pour arc4random_uniform ()?
la source
On trouve probablement utile cette version un peu mise à jour de l'
Range
extension de la réponse de Ted van Gaalen utilisant Swift 4 / Xcode 9+ :Ou cette solution un peu "hacky" pour supporter les intervalles ouverts et fermés:
Je ne sais pas s'il existe un moyen d'ajouter une propriété aux deux types d'intervalles simultanément.
la source