2016-10-27 23 views
0

私はあなたの助けが必要です。 私は、urlパラメータの2つの異なる値の間に乱数を表示したいと思います。乱数2の値を返す(最小最大)c#

これはコードです。それはexempleゲスト挿入のために、このURLだから、

public class RandomIntController : ApiController 
{ 
    public double Get() 
    { 
     double min = Request.QueryString("min"); 
     double max = Request.QueryString("max"); 
     min = 1; 
     max = 100; 

     Random number = new Random(); 
     return number.NextDouble(); 
    } 
} 

を動作しません: http://localhost:51832/api/randomint?min=12&max=23•を

最大値(23)と最小値の間の乱数を表示する必要があります私のウェブAPI(12) 。

私もattributにはいくつかのエラー 'resquest.queryStringを()' を持つ:/

REQUEST.QUERYSTRING ERROR

私は私の誤りを発見していないので、私

感謝がたくさん

です助けてください
+0

最小値と最大値は2倍ですかintですか?なぜなら、あなたがintであれば、randomを行うことができるからです。次(最小、最大)とあなたは希望する範囲の数値を取得します。 –

+0

このメソッドをループで呼び出すと(非常に速く)、常に同じ番号を取得するため、メソッド内にランダムインスタンスを作成しないでください。 randomのコンストラクタは、現在の時刻をシードとして使用します。代わりに、フィールドを使用するか、パラメータとして渡します。 –

答えて

1
int min = (int)Request.QueryString["min"]; 
int max = (int)Request.QueryString["max"]; 
Random number = new Random(); 
return number.Next(min, max); 

QueryStringはメソッドではなく、キー値のペアです。 ()の代わりに[]を使用してください。また、Nextメソッドのパラメータとしてminmaxをコードに渡します。

+0

これはmin..max-1を含む範囲の乱数を生成することに注意してください。出力に 'max'を含める場合は、' return number.Next(min、max + 1);を実行してください。 ' –

+0

@MatthewWatson OPは以下を含みます。 – Imad

+0

「間」はあいまいです。それには最初のものと最後のものが含まれているのか、最初のものと最後のものかを除外するのか、最初のものを含めて最後のものを除外するのでしょうか?明白であることが望ましい。 –

0

あなたはdouble maxdouble minを持っていて、範囲[MIN、MAX)で乱数を生成したい場合:これによって生成される乱数がmaxを含まないことを

Random rng = new Random(); // Declare this once somewhere - don't keep redeclaring it! 
double value = min + rng.NextDouble()*(max - min); 

注 - [ max、min)は、半開きの間隔を定義します。

ダブルスが必要ない場合は、Imadが提供する回答を参照してください。

1

実際に小数部分(例:12.443)を含む「二重」が必要かどうかはわかりません。必要に応じて、それを行うことができます。しかし、整数の場合はこれを考慮してください:

public int Get() 
    { 
     string minStr = Request.QueryString.Get("min"); 
     string maxStr = Request.QueryString.Get("max"); 


     int min = int.Parse(minStr); 
     int max = int.Parse(maxStr); 

     Random number = new Random(); 
     int value = number.Next(min, max); 
     return value; 
    }