初めまして。現在簡単な抽選ができるソフトを作っているのですがタイトルの通りに結果がおかしくなってしまいます。
該当コードが下記になります。
public void hoge(int n) { // 乱数作成 Random rnd = new Random(); // 1抽選の番号取得 int nMyNumber = rnd.Next(0, 100); // 試行回数 int nCount = n + 1; // 当たりテーブル int nTable = 100; // 当たり範囲 int nHit =20; // 配列作成 string[] nHitNumber= new string[table]; for (int i = 0; i < table; i++) { nHitNumber[i] = i.ToString(); } // 抽選 for (int i = 0; i < ntable; i++) { if (i >= 0 && i < nHit) { if (nHitNumber[i].Contains(nMyNumber.ToString())) { if (nHitNumber[i] == nMyNumber.ToString()) { Console.WriteLine("当たり。試行回数→" + nCount ); } } } } } void a() { for (int a = 0; a < 試行回数; a++) { hoge(a); } }
コードを実行するとコンソールに当たった履歴と、試行回数のうち何回目で当たったかどうか確認できるようにしています。(FormApplicationを使用していて、実際にはUIに表示もさせているのですが省略しています。)
不具合の内容は1度当たった際連続で当たってしまうことです。
(例:試行回数10回目で当たった際10~30回目まで連続で当たっているメッセージが表示されてしまう。)
ですがコード内のコメント「抽選」の前にディレイを持たせる、または、処理の際ブレークポイントをつけて1回1回確認すると連続で当たることはありませんでした。
なぜ、ディレイを持たせない、または、ブレークポイントをつけなかった場合うまくいかないのか、どうすればディレイなしでうまくいくのか教えていただけないでしょうか?よろしくお願いいたします。
VS2019、C♯FormApplicationで開発しています。
今回の場合の問題点は直接関係ないのですが、ソースは正しいものを提示してください。
>YAmaGNZ様
今回はUI関係ないと思ったので書きませんでしたが、次回から載せたいと思います。
ありがとうございます。
違います。
string[] nHitNumber= new string[table];
など明らかにコンパイルの通らないソースとなっています。
実際に動作させるソースをコピーしないと、質問者と回答者の情報が異なることになるので意思疎通に問題が発生する可能性があります。
>YAmaGNZ様
実際のコードですと同クラスではなく、別クラスに記載しているのでコピーではなく手打ちしたので気づきませんでした...
以後気を付けたいと思います。ありがとうございます。
回答1件
あなたの回答
tips
プレビュー