質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

1567閲覧

Swift2のarc4randomについて質問です

masayuki07

総合スコア51

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

0クリップ

投稿2016/01/20 14:42

arc4randomでランダムで問題を決めているのですが、一度問題に選ばれたら
次から選ばれない用にしたいのですが、何か良い方法はありますでしょうか?
コードは以下になります。

説明不足かもしれませんが、よろしくお願いします。

func questioning(){ let q1 = Int(arc4random()%4) if q1 == 0 { newQuestion() } else if q1 == 1 { newQuestion2() } else if q1 == 2 { newQuestion3() } else if q1 == 3 { newQuestion4() } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

その"問題"の配列を作り、removeAtIndex()を使って、ランダムに配列から問題を抜き取ってください。

投稿2016/01/20 14:48

Stripe

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masayuki07

2016/01/22 14:01

回答ありがとうございます。 removeAtIndex()を使って問題を抜き取りたいのですが、 その問題の関数を配列に代入する事は出来るのでしょうか?
Stripe

2016/01/22 14:30

普通にできます。 func a() { print("this is A.") } func b() { print("this is B.") } func c() { print("this is C.") } var items = [a, b, c] let item = items.removeAtIndex(1) item()
masayuki07

2016/01/24 15:30 編集

回答ありがとうございます。 大変参考になります。ご丁寧にコードまで書いて頂いて本当にありがとうございます。 また質問になってしまうのですが、申しわけないです。 問題を出した後にその問題を消す場合はどうすればいいでしょうか? a.b.c.の問題があり、例えば最初に aの問題を表示→aの問題を削除 次にcの問題を表示→bの問題を削除 コードを参考に書いたのですが、 //問題a.b.c.を決める func a() { print("this is A.") } func b() { print("this is B.") } func c() { print("this is C.") } var items = [a, b, c] //問題a.b.c.をランダムで決める。問題を消す。 func questioning(){ let q1 = Int(arc4random()%3) if q1 == 0 { let item = items.removeAtIndex(1) item() } else if q1 == 1 { let item = items.removeAtIndex(2) item() } else if q1 == 2 { let item = items.removeAtIndex(3) item() }} このコードだと、問題を消してから問題を表示する事になってしまいす。 それを問題を出した後にその問題を消したいです。 それと疑問に思ったのですが、問題をランダムで決める場合、 問題a.b.c をランダムで決定して、例えばbが選ばれて場合に let item = items.removeAtIndex(1)を書いた場合、bではなくaが消されてしまうのではないのでしょうか? まだまだ勉強不足の為、説明が不足していて申しわけありません。 説明も長々と失礼しました。 お時間がある時にいつでもよろしいので、回答よろしくお願いします。
Stripe

2016/01/24 15:36

問題を表示した後に、問題を削除すればいいだけです。 func questioning(){ let q1 = Int(arc4random()) % items.count items[q1]() let _ = items.removeAtIndex(q1) }
masayuki07

2016/01/25 11:07

回答ありがとうございます。 その通りにコードを書いてみたり、少し変更して書いてみても 問題はうまく表示されるのですが、やはりうまく問題が削除されません。 何故でしょうか? 何度も質問してしまい本当にすみません・・・・・。
masayuki07

2016/02/04 15:24

できました!!回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問