jadi tujuan saya dalam codebit ini adalah untuk secara acak menggulung dua dadu dan seperti yang kita semua tahu bahwa dadu biasa Anda hanya memiliki 6 sisi, jadi saya mengimpor Foundation untuk akses ke arc4random_uniform (UInt32). Saya mencoba menggunakan kisaran (1..7) untuk menghindari secara acak mendapatkan 0 namun itu mengembalikan kesalahan yang saya tidak terlalu menikmati. Saya mencoba melakukan ini:
dice1 = arc4random_uniform(UInt32(1..7))
Namun itu kembali
Tidak dapat menemukan kelebihan untuk 'init' yang menerima argumen yang disediakan
Saya harap ini adalah informasi yang cukup untuk Anda hutang luar biasa untuk membantu saya :)
Harap dicatat saya hanya melakukan ini di taman bermain untuk berlatih cepat. Itu tidak penting bahwa saya belajar bagaimana melakukan ini; itu hanya saya bermain-main sebelum saya mulai membangun aplikasi yang sebenarnya: 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
Ini mengembalikan kesalahan 'Rentang $ T3' tidak dapat dikonversi ke 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.")
sumber
dice1 = arc4random_uniform(6) + 1
untuk mendapatkan kisaran 1 - 6. Saya tidak melakukan iOS obyektif C juga tidak memiliki pengetahuan tentang bahasa cepat. Metode acak akan mengembalikan Anda 0 - 5, dan +1 akan menjadi 1 - 6.u_int32_t arc4random_uniform(u_int32_t upper_bound);
Jawaban:
Saya percaya Anda harus melakukannya
untuk mendapatkan kisaran 1 - 6. Saya tidak melakukan iOS obyektif C juga tidak memiliki pengetahuan tentang bahasa cepat. Metode acak harus mengembalikan nilai antara 0 dan 5, dan +1 akan menjadikannya nilai antara 1 dan 6.
Jika Anda membutuhkan rentang antara katakanlah 10 - 30 maka lakukan saja
sumber
Saya telah membuat ekstensi tipe Int. diuji di taman bermain, semoga ini bermanfaat. Itu juga menerima rentang negatif:
gunakan like
atau mendefinisikannya sebagai ekstensi Rentang sebagai properti seperti ini:
sumber
Cukup banyak jawaban bagus, tetapi saya hanya ingin membagikan fungsi generasi nomor acak Swift favorit pribadi saya untuk bilangan bulat positif:
Cepat 2
Cepat 3
Berikut ini adalah pembaruan cepat untuk Swift 3 dan, sebagai bonus, sekarang bekerja untuk semua tipe nilai yang sesuai dengan protokol SignedInteger - jauh lebih nyaman untuk aplikasi data inti yang perlu menentukan Int16, Int32 dll. Sebagai catatan cepat, jika Anda benar-benar membutuhkannya untuk bekerja pada bilangan bulat tak bertanda juga, cukup salin seluruh fungsi lalu ganti
SignedInteger
denganUnsignedInteger
dantoIntMax()
dengantoUIntMax()
.Cepat 4
Berkat penghapusan toIntMax () di Swift 4, kita sekarang harus menggunakan cara yang berbeda untuk mengkonversi ke tipe integer umum. Dalam contoh ini saya menggunakan Int64 yang cukup besar untuk keperluan saya, tetapi jika Anda menggunakan bilangan bulat yang tidak ditandatangani atau memiliki tipe kustom Int128 atau Int256 Anda harus menggunakannya.
Satu lagi, untuk total acak-phile, berikut ini adalah ekstensi yang mengembalikan elemen acak dari
Collection
objek tipe apa pun . Catatan ini menggunakan fungsi di atas untuk menghasilkan indeksnya sehingga Anda akan membutuhkan keduanya.Pemakaian
mengembalikan angka acak antara 1 dan 6.
mengembalikan angka antara 50 dan 100 inklusif. Secara alami Anda dapat mengganti nilai 50 dan 100 dengan apa pun yang Anda suka.
Cepat 4.2
Sayangnya, jawaban StackOverflow terbaik saya akhirnya dianggap usang. Anda sekarang dapat menggunakan hanya
Int.random(in: 1 ... 6)
untuk menghasilkan angka acak dalam rentang yang diberikan. Juga berfungsi untuk bentuk bilangan bulat dan bilangan bulat lainnya. Jenis koleksi juga sekarang menyediakanshuffle()
danrandomElement()
fungsi. Oleh karena itu tidak ada lagi kebutuhan untuk fungsi pengacakan mewah kecuali jika Anda ingin menggunakan jenis pengacak tertentu.sumber
randomNumber(-3 ... -1)
berfungsi selama Anda memiliki spasi sebelum dan sesudah...
. Anda dapat menggunakanrandom(-3 ..< -1
untuk mengecualikan nomor terakhir juga.ClosedInterval
alih-alihRange
jika Anda ingin pekerjaan ini dengan non-integer.Menurut Swift 4.2 sekarang mudah untuk mendapatkan nomor acak seperti ini
untuk lebih jelasnya lihat ini
sumber
Jika Anda ingin saya membuatnya untuk angka acak. ini adalah ekstensi nomor Int dan Double, Float
GUNAKAN:
sumber
Cepat 3/4:
sumber
Itu karena arc4random_uniform () didefinisikan sebagai berikut:
Dibutuhkan UInt32 sebagai input, dan mengeluarkan UInt32. Anda sedang berusaha memberikannya rentang nilai. arc4random_uniform memberi Anda angka acak di antara 0 dan dan angka yang Anda lewati (secara eksklusif), jadi jika misalnya, Anda ingin menemukan angka acak antara -50 dan 50, karena
[-50, 50]
Anda bisa menggunakanarc4random_uniform(101) - 50
sumber
Saya memodifikasi jawaban @DaRk -_- D0G untuk bekerja dengan Swift 2.0
sumber
Cepat:
sumber
Dengan cepat ...
Ini termasuk, panggilan
random(1,2)
akan mengembalikan 1 atau 2, Ini juga akan berfungsi dengan angka negatif.sumber
Jawabannya hanya 1 kode baris:
Solusi alternatifnya adalah:
Meskipun kekurangannya adalah angka itu tidak bisa mulai dari 0.
sumber
Sejak Swift 4.2:
Digunakan seperti:
sumber
Sunting: Swift 4.2+ menyediakan ini sekarang:
Adalah idiomatis bagi saya untuk memperluas
Range
:Digunakan:
sumber
C
. Selamat bersenang-senang!Saya berhasil membuat nomor acak menggunakan kode berikut:
Semoga ini bisa membantu Anda.
sumber
Solusi Swift 3 Xcode Beta 5. Berdasarkan pada Ted van Gaalen Answer.
sumber
var rangeFromLimits = arc4random_uniform ((UPPerBound - LOWerBound) + 1)) + LOWerBound;
sumber
semoga ini berhasil. membuat angka acak antara rentang untuk arc4random_uniform ()?
sumber
Mungkin ada yang menemukan ini versi
Range
ekstensi sedikit diperbarui dari jawaban Ted van Gaalen menggunakan Swift 4 / Xcode 9+ :Atau ini solusi "hacky" sedikit untuk mendukung interval terbuka dan tertutup:
Tidak yakin apakah ada cara untuk menambahkan properti ke kedua jenis interval secara bersamaan.
sumber