- ベストアンサー
重複なしでランダムに画像を表示する方法
- C#で重複なしでランダムに画像を表示するプログラムのエラーを修正する方法を教えてください。
- GetNextIndex()関数内で起こっているエラーを修正する方法を教えてください。
- ランダムな番号の配列を作成して、重複をチェックしながら画像を表示する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 値として何を返せばよろしいのでしょうか? それを考えるのが「プログラミング」というものです。 まず、プログラムの仕様をまとめた方がいいです。 それから、一気に作らず、各メソッドが期待通りに動作しているか、テストした方がよいでしょう。今回のだったら、画像の表示等は後にして、GetNextIndexが「重複していない整数」をちゃんと返すかどうか、確認してから次へ進めましょう。 button1_Clickの動作からして、GetNextIndexは、m_nIndexに設定するための0以上IMAGES未満の整数を、重複無しにランダムに返してくることが期待されているのではないでしょうか。あとは、エラー時には負の整数を返すことも。 そこで、GetNextIndexを見ると、returnの直前では int a[] : 1以上n以下の整数をシャフルした配列 となっています。nは定義されていないので、IMAGESの間違いで、 > for (int i = 0; i < IMAGES; ++i) a[i] = i + 1; の a[i] = i + 1;をa[i] = i ;にすれば int a[] : 0以上IMAGES未満の整数をシャフルした配列 となり、このaの値をGetNextIndexが呼ばれる度に一つずつ返せば、目的の動作になるはずだ、ということがわかります。 なので return a[X] ; のような形になるでしょう。 ところが、今のままでは、 ・配列aを毎回作っている。これではシャフルの意味がない ・どこまで使って、次に何を返せばいいのか、覚えておく仕組みが無い ・配列をリセットする手段が無い。 と言う問題があります。 解決策としては、Randomのようなインターフェースで専用のクラスを用意するのがいいのでは、と思います。
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
> protected int GetNextIndex() と宣言したのに > return r.ToString(); なぜstringで返すのでしょう? 戻り値がintのはずなのに、stringが指定してあって、戻り値の型にあわせるためにstring→intの変換をしようにも変換方法がわからない(暗黙の変換が無い)というエラーです。 そもそもこのGetNextIndexですが ・Randomクラスであるrを返すこと自体おかしい ・呼ばれるたびに、毎回新しい乱数と新しい重複チェック配列を作っています。これらはreturn後に自動で削除されます。 まったく、重複チェックになっていません。
お礼
回答ありがとうございます。 値として何を返せばよろしいのでしょうか?
お礼
回答ありがとうございました。 kmeeさんのおっしゃる通りに1つずつ作成していったら 目標とする動きが出来ました。 ありがとうございました。 それでは、失礼いたします。