Mein Ziel in diesem Codebit ist es also, zufällig zwei Würfel zu würfeln. Wie wir alle wissen, hat Ihr regulärer Würfel nur 6 Seiten. Deshalb habe ich Foundation für den Zugriff auf arc4random_uniform (UInt32) importiert. Ich habe versucht, den Bereich von (1..7) zu verwenden, um zu vermeiden, dass zufällig 0 angezeigt wird. Dies hat jedoch einen Fehler zurückgegeben, den ich nicht besonders genossen habe. Ich habe versucht, dies zu tun:
dice1 = arc4random_uniform(UInt32(1..7))
das kehrte jedoch zurück
Es wurde keine Überladung für 'init' gefunden, die die angegebenen Argumente akzeptiert
Ich hoffe, dass dies genug Informationen für Sie sind, um mir zu helfen :)
Bitte beachten Sie, dass ich dies nur auf einem Spielplatz mache, um schnell zu üben. Ich muss nicht unbedingt lernen, wie man das macht. Ich bastele nur, bevor ich mit dem Erstellen tatsächlicher Apps beginne: 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
Dies gibt den Fehler zurück, dass 'Range $ T3' nicht in UInt32 konvertierbar ist
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.")
quelle
dice1 = arc4random_uniform(6) + 1
, um den Bereich 1 - 6 zu erreichen. Ich mache weder iOS-Ziel C noch habe ich Kenntnisse über schnelle Sprache. Die Zufallsmethode sollte 0 - 5 zurückgeben, und + 1 ist 1 - 6.u_int32_t arc4random_uniform(u_int32_t upper_bound);
Antworten:
Ich glaube du solltest es tun
um den Bereich 1 - 6 zu erreichen. Ich mache weder iOS-Ziel C noch habe ich irgendwelche Kenntnisse in der schnellen Sprache. Die Zufallsmethode sollte einen Wert zwischen 0 und 5 zurückgeben, und + 1 ergibt einen Wert zwischen 1 und 6.
Wenn Sie einen Bereich zwischen 10 und 30 benötigen, tun Sie dies einfach
quelle
Ich habe eine Erweiterung vom Typ Int erstellt. Ich habe es auf dem Spielplatz getestet und hoffe, dass dies nützlich ist. Es werden auch negative Bereiche akzeptiert:
benutze wie
oder definieren Sie es als Range-Erweiterung als Eigenschaft wie folgt:
quelle
Einige gute Antworten, aber ich wollte nur meine persönliche Lieblingsfunktion zur Erzeugung von Swift-Zufallszahlen für positive ganze Zahlen teilen:
Swift 2
Swift 3
Hier ist ein schnelles Update für Swift 3, und als Bonus funktioniert es jetzt für jeden Werttyp, der dem SignedInteger-Protokoll entspricht - viel praktischer für Kerndatenanwendungen, in denen Int16, Int32 usw. angegeben werden müssen Ich brauche es wirklich, um auch mit vorzeichenlosen Ganzzahlen zu arbeiten. Kopieren Sie einfach die gesamte Funktion und ersetzen Sie sie
SignedInteger
durchUnsignedInteger
undtoIntMax()
mittoUIntMax()
.Swift 4
Dank der Entfernung von toIntMax () in Swift 4 müssen wir jetzt ein anderes Mittel zum Konvertieren in einen gemeinsamen Integer-Typ verwenden. In diesem Beispiel verwende ich Int64, das für meine Zwecke groß genug ist. Wenn Sie jedoch vorzeichenlose Ganzzahlen verwenden oder einen benutzerdefinierten Int128- oder Int256-Typ haben, sollten Sie diese verwenden.
Eine weitere Erweiterung für das gesamte Zufallsphil ist eine Erweiterung, die ein zufälliges Element von einem beliebigen
Collection
Objekt zurückgibt . Beachten Sie, dass dies die obige Funktion verwendet, um den Index zu generieren, sodass Sie beide benötigen.Verwendung
gibt eine Zufallszahl zwischen 1 und 6 zurück.
Gibt eine Zahl zwischen 50 und 100 einschließlich zurück. Natürlich können Sie die Werte 50 und 100 durch beliebige Werte ersetzen.
Swift 4.2
Leider ist meine beste StackOverflow-Antwort endlich veraltet. Sie können jetzt einfach
Int.random(in: 1 ... 6)
eine Zufallszahl in einem bestimmten Bereich generieren. Funktioniert auch für andere Formen von Ganzzahlen und Gleitkommazahlen. Collection - Typen auch jetzt bietenshuffle()
undrandomElement()
Funktionen. Es sind daher keine ausgefallenen Randomisierungsfunktionen mehr erforderlich, es sei denn, Sie möchten einen bestimmten Randomisierertyp verwenden.quelle
randomNumber(-3 ... -1)
funktioniert so lange, wie Sie Leerzeichen vor und nach dem haben...
. Sie können auchrandom(-3 ..< -1
die letzte Nummer ausschließen.ClosedInterval
anstelle von,Range
wenn Sie möchten, dass dies mit Nicht-Ganzzahlen funktioniert.Laut Swift 4.2 ist es jetzt einfach, eine solche Zufallszahl zu erhalten
Weitere Details finden Sie hier
quelle
Wenn du willst, erstelle ich das für Zufallszahlen. Dies ist die Erweiterung der Nummern Int und Double, Float
VERWENDEN :
quelle
Swift 3/4:
quelle
Das liegt daran, dass arc4random_uniform () wie folgt definiert ist:
Es nimmt ein UInt32 als Eingabe und spuckt ein UInt32 aus. Sie versuchen, einen Wertebereich zu übergeben. arc4random_uniform gibt Ihnen eine Zufallszahl zwischen 0 und der Zahl, die Sie (ausschließlich) übergeben. Wenn Sie also beispielsweise eine Zufallszahl zwischen -50 und 50 suchen möchten, wie
[-50, 50]
Sie sie verwenden könntenarc4random_uniform(101) - 50
quelle
Ich habe die Antwort von @DaRk -_- D0G geändert, um mit Swift 2.0 zu arbeiten
quelle
Schnell:
quelle
In kurzer Zeit ...
Dies ist inklusive, ein Anruf
random(1,2)
gibt eine 1 oder eine 2 zurück. Dies funktioniert auch mit negativen Zahlen.quelle
Die Antwort ist nur 1 Zeilencode:
Die alternative Lösung ist:
Obwohl der Nachteil ist, dass diese Zahl nicht bei 0 beginnen kann.
quelle
Seit Swift 4.2:
Verwendet wie:
quelle
Edit: Swift 4.2+ bietet dies jetzt:
Es ist für mich idiomatisch zu erweitern
Range
:In Benutzung:
quelle
C
. Habe Spaß!Ich habe erfolgreich eine Zufallszahl mit dem folgenden Code erstellt:
Hoffe das kann dir helfen.
quelle
Swift 3 Xcode Beta 5 Lösung. Basierend auf Ted van Gaalen Antwort.
quelle
var rangeFromLimits = arc4random_uniform ((UPPerBound - LOWerBound) + 1)) + LOWerBound;
quelle
hoffe das funktioniert. Zufallszahl zwischen Bereich für arc4random_uniform () machen?
quelle
Wahrscheinlich findet man diese etwas aktualisierte Version der
Range
Erweiterung aus Ted van Gaalens Antwort mit Swift 4 / Xcode 9+ nützlich :Oder diese etwas "hackige" Lösung zur Unterstützung offener und geschlossener Intervalle:
Ich bin mir nicht sicher, ob es eine Möglichkeit gibt, beiden Intervalltypen gleichzeitig Eigenschaften hinzuzufügen.
quelle