así que mi objetivo en este codebit es lanzar dos dados al azar y, como todos sabemos, su dado regular solo tiene 6 lados, así que importé Foundation para acceder a arc4random_uniform (UInt32). Intenté usar el rango de (1..7) para evitar obtener 0 al azar, sin embargo, eso arrojó un error que no disfruté demasiado. Traté de hacer esto:
dice1 = arc4random_uniform(UInt32(1..7))
sin embargo eso regresó
No se pudo encontrar una sobrecarga para 'init' que acepte los argumentos proporcionados
Espero que esta sea suficiente información para que ustedes tengan deudas increíbles para ayudarme :)
Tenga en cuenta que solo estoy haciendo esto en un patio de recreo para practicar rápido. No es imperativo que aprenda a hacer esto; solo soy yo jugando antes de saltar a crear aplicaciones reales: 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
Esto devuelve un error de 'Rango $ T3' no es convertible a 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.")
fuente
dice1 = arc4random_uniform(6) + 1
para obtener el rango 1 - 6. Sin embargo, no hago el objetivo C de iOS ni tengo ningún conocimiento sobre lenguaje rápido. El método aleatorio debería devolverle 0 - 5, y + 1 será 1 - 6.u_int32_t arc4random_uniform(u_int32_t upper_bound);
Respuestas:
Creo que deberias hacer
para obtener el rango 1 - 6. Sin embargo, no hago el objetivo C de iOS ni tengo ningún conocimiento sobre lenguaje rápido. El método aleatorio debe devolver un valor entre 0 y 5, y + 1 lo convertirá en un valor entre 1 y 6.
Si necesita un rango entre digamos 10-30, simplemente haga
fuente
He hecho una extensión de tipo Int. Lo probé en el patio de recreo, espero que esto sea útil. También acepta rangos negativos:
usar como
o definirlo como una extensión de Rango como una propiedad como esta:
fuente
Muy buenas respuestas, pero solo quería compartir mi función favorita de generación de números aleatorios Swift para enteros positivos:
Swift 2
Swift 3
Aquí hay una actualización rápida para Swift 3 y, como beneficio adicional, ahora funciona para cualquier tipo de valor que se ajuste al protocolo SignedInteger, mucho más conveniente para aplicaciones de datos centrales que necesitan especificar Int16, Int32, etc. Como nota rápida, si usted Realmente necesito que funcione también en enteros sin signo, solo copie la función completa y luego reemplace
SignedInteger
conUnsignedInteger
ytoIntMax()
contoUIntMax()
.Swift 4
Gracias a la eliminación de toIntMax () en Swift 4, ahora tenemos que usar un medio diferente para convertir a un tipo entero común. En este ejemplo, estoy usando Int64, que es lo suficientemente grande para mis propósitos, pero si está usando enteros sin signo o tiene un tipo personalizado Int128 o Int256, debe usarlos.
Una más, para el phile aleatorio total, aquí hay una extensión que devuelve un elemento aleatorio de cualquier
Collection
objeto tipo. Tenga en cuenta que esto utiliza la función anterior para generar su índice, por lo que necesitará ambos.Uso
devuelve un número aleatorio entre 1 y 6.
devuelve un número entre 50 y 100 inclusive. Naturalmente, puede reemplazar los valores de 50 y 100 con lo que quiera.
Swift 4.2
Por desgracia, mi mejor respuesta de StackOverflow se ha vuelto obsoleta por fin. Ahora puede usar simplemente
Int.random(in: 1 ... 6)
para generar un número aleatorio en un rango dado. También funciona para otras formas de número entero y de coma flotante. Los tipos de colección ahora también proporcionanshuffle()
yrandomElement()
funciones. Por lo tanto, ya no es necesario utilizar funciones de aleatorización sofisticadas a menos que desee utilizar un tipo de aleatorizador específico.fuente
randomNumber(-3 ... -1)
funciona siempre que tenga espacios antes y después de...
. También puede usarrandom(-3 ..< -1
para excluir el último número.ClosedInterval
lugar deRange
si desea que esto funcione con números no enteros.Según Swift 4.2 ahora es fácil obtener números aleatorios como este
para más detalles mira esto
fuente
Si quieres, creo eso para números aleatorios. esta es la extensión del número Int y Double, Float
UTILIZAR :
fuente
Swift 3/4:
fuente
Esto se debe a que arc4random_uniform () se define de la siguiente manera:
Toma un UInt32 como entrada y escupe un UInt32. Estás intentando pasarle un rango de valores. arc4random_uniform le da un número aleatorio entre 0 y el número que lo pasa (exclusivamente), por lo que si, por ejemplo, desea encontrar un número aleatorio entre -50 y 50, ya
[-50, 50]
que podría usararc4random_uniform(101) - 50
fuente
Modifiqué la respuesta de @DaRk -_- D0G para trabajar con Swift 2.0
fuente
Rápido:
fuente
En rápido ...
Esto es inclusivo, las llamadas
random(1,2)
devolverán un 1 o un 2, esto también funcionará con números negativos.fuente
La respuesta es solo 1 código de línea:
La solución alternativa es:
Aunque el inconveniente es que ese número no puede comenzar desde 0.
fuente
Desde Swift 4.2:
Usado como:
fuente
Editar: Swift 4.2+ proporciona esto ahora:
Es idiomático para mí extender
Range
:En uso:
fuente
C
. ¡Que te diviertas!Logré crear un número aleatorio con éxito usando el siguiente código:
Espero que esto le pueda ayudar.
fuente
Solución Swift 3 Xcode Beta 5. Basado en la respuesta de Ted van Gaalen.
fuente
var rangeFromLimits = arc4random_uniform ((UPPerBound - LOWerBound) + 1)) + LOWerBound;
fuente
Espero que esto esté funcionando. hacer un número aleatorio entre rango para arc4random_uniform ()?
fuente
Probablemente uno encuentre útil esta versión un poco actualizada de la
Range
extensión de la respuesta de Ted van Gaalen usando Swift 4 / Xcode 9+ :O esta es una solución un poco "hacky" para admitir intervalos abiertos y cerrados:
No estoy seguro de si hay una manera de agregar propiedades a ambos tipos de intervalos simultáneamente.
fuente