CGI-BBS > CGI > Perl > Perlについて複数の異なる乱数を同時に表示できない。


カレッヂ
カレッヂ


質問者 c10  投稿日 9/5(木) 01:23:53
1から10までの数の中で異なる3つの乱数を表示したいのですが、どうにもうまくいきません。
自分では次のような構文しか浮かんでこないのですが、それも中途半端です。
何方かアドバイスして頂けないでしょうか?

$r1= int(rand(10)+1);
$r2= int(rand(10)+1);
$r3= int(rand(10)+1);

if ($r1 eq $2) {
  ?????????????????;
} elsif ($r1 eq $r3) {
  ????????????????;
} elsif ($r2 eq $r3) {
  ????????????????;
} else {
    print $r1;
    print $r2;
    print $r3;
}

プロバイダ参照:
サーバのOS:WINサーバ
パソコンのOS:Win95系
エディタ:
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:(未選択)

回答者 しあわせのツボ  [削除]  投稿日 9/5(木) 12:04:20
私は配列からランダムに抜き取る方法を使っています。
@tmp = (1..10);
while ($#out < 2) { push (@out, splice(@tmp, int(rand($#tmp)), 1)); }
で、$out[0]・$out[1]・$out[2]に異なる数字が入ります。
質問者 c10  [削除]  投稿日 9/7(土) 00:49:18
レスして頂きたいへんありがとうございました。
申し訳ありませんが、もうひとつ教えていただきたいのですが宜しいでしょうか。
乱数の範囲を当初の1〜10ではなく任意の範囲(例えば1〜4)に設定しようと
教えていただいた内容を次のように変更したのですが、駄目(処理中のまま)です。
お手数ですが、またアドバイスして頂けるとさいわいです。

「@tmp = (1..10);」→「@tmp = (1..4);」


回答者 しあわせのツボ  [削除]  投稿日 9/7(土) 02:27:54
確認しますが、1..10なら動きますか?

この処理は、自作スクリプトで「データベース検索をして結果を@tmpに格納し、
ヒットが多ければランダムに抜粋して表示する」処理をしている部分をコピーし、
ご質問に合わせて一部改変したものです。
検索結果数は予測不能なので、@tmpの要素数には影響されないよう
書いたつもりなのですが…。

と言うか、4通りのうち3つなら、逆に外す1つをrandで抜いて
他の3つを表示する方が楽かもしれませんよ。
質問者 c10  [削除]  投稿日 9/13(金) 00:26:12
すみません。
私のスクリプトからはずし、教えて頂いたスクリプトで試したら(1..4)でも動きました。
私のスクリプトに問題があるようです。
(まだ解決してませんが...自力でがんばります。)

いろいろ本当にありがとうございました。

このページは終了したので返信(回答)は書きこめません

Web裏技