2 日前、誰かが試験システムをコンパイルしたいと考えているのを見かけました。そのとき、私はランダム関数 RND を少しだけ使用しました。
実際には、通常、データベースから N 個の質問をランダムに抽出する必要があります。
次のコードはすべて VBS に基づいています。
通常はこのように書かれます
'繰り返しのない乱数を生成する 関数 rndarray(istart,iend,sum) dim arrayid()、i、j、blnre、temp、iloop、eloop redim 配列 ID(合計-1) i=0 iloop=0 エロープ=0 blnre=false ランダム化する 私が<合計である間に実行します temp=int(rnd*(iend-istart+1)+istart) i=0 の場合 配列ID(0)=温度 i=i+1 iloop=iloop+1 それ以外 j=0からi-1の場合 arrayid(j)=temp の場合 blnre=true iloop=iloop+1 「exit for'」という文は、冗長なループを防ぐために非常に重要です。 それ以外 iloop=iloop+1 終了する場合 次 blnre=false の場合 配列ID(i)=温度 i=i+1 それ以外 blnre=false 終了する場合 終了する場合 エロープ=エロープ+イループ iloop=0 ループ rndarray=結合(配列ID)&ループ数:&eloop 終了関数 response.write rndarray(1,10,5)&<br>'呼び出しプロセス |
PS. iloop と eloop はループ数を計算するためのものです。
上記では、ほとんどの人がこのメソッドを使用して書き込み、乱数を生成し、それを以前に生成したものと比較して、それが使用可能かどうかを判断します。
しかし、これは AI または効率的な方法ではありません。なぜ 2 つの配列を使用しないのでしょうか。
配列 1 には必要な文字列、数値などが格納され、配列 2 には生成された乱数が格納されます。中間変数 temp の添え字 x が毎回ランダムに生成されると、それが配列 2 に割り当てられ、その後添え字が削除されます。 array 1 as 配列 1 から抽出された数。
方法 2
関数 rndstr(istart,iend,isum) dim i,j,vntarray() redim vntarray(iend-istart) j=iスタート i=0 から iend-istart まで vntarray(i)=j j=j+1 次 dim vntarray2(),temp,x,y redim vntarray2(isum-1) y=iend-istart+1 x=0 temp=vntarray x<isum の間行う 薄暗い ランダム化する vntarray2(x)=temp(int(rnd*y)) a= &vntarray2(x)& temp=split(trim(replace(chr(32)&join(temp)&chr(32),a, ))) x=x+1 y=y-1 ループ rndstr=join(vntarray2) 終了関数 応答.write rndstr(1,5,2) |
このほうが簡単ではないでしょうか?
少し拡張すると、文字と数字を含むランダムな文字列を生成したい場合は、配列 1 に値を代入し、関数 chr(num) を使用するだけです。
モバイル宝くじ当選ページ プログラムを作成する必要があるとします。
まず配列 1 に値を代入します。配列 1 は 130.... から 139.... まで循環的に代入できます。 もちろん、実際に使用する場合はデータベースから既存の値を代入し、その後ランダムに抽出して配列 2 に代入します。 ;
最後に、さらに磨きをかけます
temp=replace(join(array2),chr(32),) |
電話=左(温度,6)&***&右(温度,2)
137648***58 のような結果が得られます (笑)
書きすぎて疲れました~~