• ベストアンサー

ランダム数値の発生で

お世話になります。 1~10の数値をランダムに発生させる。 もし数値が4ならもう一度ランダムし直し。 4以外なら表示 上記のようなロジックで4ならもう一度ランダムし直しといったところで困っています。以下途中までのスクリプトです。 ループで4以外になったら抜け出すようなロジックになるのかなと思いつつ、どうしたらいいかわかりません。 ご教授宜しくお願いします。 $number = rand(1,10); if($number == 4){ $number = rand(1,10); } echo $number;

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • widoww
  • ベストアンサー率20% (33/159)
回答No.1

$number = rand(1,10); if($number == 4){ $number = rand(1,10); } echo $number; ↑では・・ 2回目に4がでたとき・・・ そのまま4と出力されてしまいます。 これでよいかと・・・ do{ $number=rand(1,10); }while($number==4)

armstrong-us
質問者

お礼

ありがとうございました。 無事出来ました。

関連するQ&A

  • ランダムでシーンの移動ができない。

    ランダムでシーンの移動をやりたくて、 http://okwave.jp/kotaeru.php3?q=1691219 を参考にスクリプトを組んだのですが、うまくいきません。 書いたスクリプトは、 rand = Math.floor(Math.random()*6); if (rand == 0) { gotoAndPlay("シーン 7", 1); } else if (rand == 1) { gotoAndPlay("シーン 5", 1); } else if (rand == 2) { gotoAndPlay("シーン 6", 1); } else if (rand == 3) { gotoAndPlay("シーン 4", 1); } else if (rand == 4) { gotoAndPlay("シーン 3", 1); } else if (rand == 5) { gotoAndPlay("シーン 2", 1); } です。 (シーン1の一番最初に書きました。swfが読まれたらすぐにランダムが始まる予定です。。。) 現状、ランダムを全く無視して、作ったシーンの順番でシーンの再生が進んでしまいます。 スクリプトに問題があるのでしょうか。。。? よろしくお願いします。

    • ベストアンサー
    • Flash
  • ランダムな英数字を発生させてたいのですが

    Perl5をつかっています。 毎回ランダムな英数字の何桁かの文字列を発生させるCGIを作りたいのですが可能なのでしょうか? rand関数をつかうと乱数を発生はできるのはわかるのですが英文字ではないようなので困っています。 どなたかご教授おねがいします。

    • ベストアンサー
    • CGI
  • 1から9までの数値をランダムに発生させたい

    ●質問の主旨 INT関数及びRND関数を使い、「0から9」までの 数値をランダムに発生させるのではなく、「1から9」 までの数値をランダムに発生させるには、下記のコードを どのように書き換えれば良いでしょうか? ●質問の補足 下記コード及び画像のように九九の計算問題を 作成したいと思っています。今のコードでは 「0から9」までの数値が発生するのは、分かっていたので If ThenステートメントやSelect Caseステートメントを 使って、0の数値が発生するときは「1」とみなすというような 記述もしてみましたが、上手くいきませんでした。 ご存知のかたよろしくお願いします。 なお使用機種はWindowsVista、Excel2007を使用しています。 私はVBAをはじめて3カ月程度です。 ●コード Option Explicit Const ORG_RW As Integer = 4 '問題の開始行 Const DST_RW As Integer = 8 '問題の終了行 Const NUM1_CLM As Integer = 1 '問題の数値1の列 Const NUM2_CLM As Integer = 3 '問題の数値2の列 Const ANSW_CLM As Integer = 5 '問題の解答の列 Private Sub CommandButton1_Click() 'Checkボタン Dim i As Integer 'カウンタ変数 For i = ORG_RW To DST_RW'問題の開始行から問題の終了行まで If Cells(i, NUM1_CLM).Value * Cells(i, NUM2_CLM).Value = Cells(i, ANSW_CLM).Value Then Cells(i, ANSW_CLM).Font.Color = vbBlue '問題が正解のときは文字が青色 Else Cells(i, ANSW_CLM).Font.Color = vbRed '問題が正解のときは文字が赤色 End If Next i End Sub Private Sub CommandButton2_Click() 'Resetボタン Dim i As Integer 'カウンタ変数 For i = ORG_RW To DST_RW Cells(i, ANSW_CLM).ClearContents '解答が消去される Cells(i, ANSW_CLM).Font.Color = vbBlack '解答が消去されたときは文字が黒色 ' 解答が消去されたときは0~9までのランダムな数値が発生     Cells(i, NUM1_CLM).Value = Int(Rnd * 10) '解答が消去されたときは0~9までのランダムな数値が発生 Cells(i, NUM2_CLM).Value = Int(Rnd * 10) Next i End Sub

  • 0から1までの乱数(実数値)を発生させるのと、ある確率の時に処理をさせたい。

    1 #include <stdio.h> 2 #include <time.h> 3 #include <stdlib.h> 4 #define P 0.05 5 int main(void) 6 { 7 int abc; 8 double x; 9 srand(time(NULL)); 10 x = (double)rand()/RAND_MAX; 11 if(x > P){ 12 abc = 1; 13 } ・・・ (1)0から1までのランダムな実数値を10行目で発生させているつもりですが、あまりきざみが良くない?とこ耳にはさんだので0から1までの最もいいと思われるランダムな実数値の発生を教えてもらえないでしょうか? (2)11行目で約1/20000の確率でabcに1を代入したいのですが、上記のプログラムをどのように改良すればよろしいでしょうか? どちらか片方でもアドバイス頂ければ幸いなので、お手数ですがよろしくお願いいたします。

  • Excelでランダムに抽選

    あるスポーツ競技の対戦組み合わせ表を作成したいのですが、 例として20チームあり、ランダムにそれぞれのチームに1~20までの数値を割り当てたい場合、 どのようにすればよいでしょうか? RANDで乱数を作るところまではできたのですが、 この関数では数値が重複してしまいます。 アドインの乱数発生ツールも使い方がイマイチわかりません。 よろしくお願いします。

  • 特定のムービークリップの上で キラキラがランダムに発生

    お世話になります。 あともう少しのところでうまくいきません。 質問はタイトルの通りなんです。本や、サンプルをいろいろ研究して、 キラキラがランダムに発生するスクリプトを書いたんです。 何がしたいかというと、ムービークリップ「mc_stage」の上だけにキラキラをランダムに発生させたいんです。 sw = mc_stage._width; sh = mc_stage._height; level = 1; this.onEnterFrame = function() { if (Math.random()*10>9) { level++; newname = "Fwks"+level; Fwks.duplicateMovieClip(newname, level); this[newname]._x = Math.random()*sw; this[newname]._y = Math.random()*sh; } if (level>8) { this.onEnterFrame = undifined; } }; この形だと、mc_stageの幅と高さを取得するだけで、座標を取得していません。なので、ステージの左上からmc_stageのwidthとheightの範囲できらきらが発生してしまいます。 どうしたらきちんとmc_stageの上だけでランダムに発生させれますか?ぜひおしえてください!

    • ベストアンサー
    • Flash
  • 公平なランダム

     重複のないn個の配列を作成する、効率がよくて高速なランダム発生プログラムを探しています。  現在は下記のようなロジックを組んでいます。   1.n個の配列を用意(nはパラメータで与えられる)   2.配列に1からnまでの数値を昇順に格納   3.ランダムな値xを生成し、配列の1番目とx番目を交換   4.ランダムな値xを生成し、配列の2番目とx番目を交換       :       :   5.ランダムな値xを生成し、配列のn番目とx番目を交換  この方法を越えるものはないでしょうか。  条件は、効率(公平性)がこれよりも高くて、速度が O(2n) を超えないことです。  最終的に配列の先頭20個程度の効率が高くなっていればよく、それ以降は多少偏りがあっても構いません。  ちなみに現在は、単純に x = rand(n); という方法で生成しており、初期化関数は使っていません。  よろしくお願いします。

    • ベストアンサー
    • Perl
  • PHPで画像を表示するプログラムについて

    実行するとランダムで取得した値を利用して、3パターンくらいの画像を切り替えて表示するPHPファイル を作成したいです! 以下のように書いてみたのですが、如何せん初心者なものでできない原因すらわかりません! 間違っているところを是非指摘していただきたいです。 宜しくお願い致します <?php $rand = rand(1,10); switch($rand){ case 1: echo("1"); break; case 2: echo("2"); break; case 3: echo("3"); break; case 4: echo("4"); break; case 5: echo("5"); break; case 6: echo("6"); break; case 7: echo("7"); break; case 8: echo("8"); break; case 9: echo("9"); break; case 10: echo("10"); break; if ($rand <= 3){ echo"<img src='a.jpg'>"; } elseif ($rand 4< || $rand >6 ) { echo"<img src='b.jpg'>"; elseif ($rand 7< || $rand >10 ) { echo"<img src='c.jpg'>"; } } ?>

    • 締切済み
    • PHP
  • エクセル関数 RAND関数で数字を固定させるには!?

    RANDで数値をランダムに発生させ、その数値を使い、他の場所へコピーすると 毎回ランダムに数値が変わりますが、発生させたあと固定するにはヘルプでは、 =RAND()を数式バーに入力しF9を押すと書いてますが、それでは変化するし 入力するとランダムな数字が数式バーにでて、リターンするとまた変化します どこのセルに入力するのか!?またそのランダムな数値をコピーして形式を値にしてコピーする方法しか思い当たりません。 なんとかヘルプで説明しているように簡単な操作でできませんか、どなたか ご存知でしたらよろしくお願いします。

  • C言語/ランダムbeepのプログラム方法

    プログラムを書いていますが理解に苦しんでいます。 勉強し始めたばかりなのでかなりハードです。どなたか助けていただけませんか。 前に進めずにいます。 何をしたいかというと、マッチングゲームの中の一部でランダムなビープサウンドにあわせて反応して答えを返すというものです。答えられなければ点数がマイナスになります。 まず、数字をランダムに1から10の間で生成し、出た数字がある特定の数字だとビープサウンドが流れるという仕組みを考えたのですがどうでしょうか。 本当に切羽詰っています。助けてください。 // rand.cpp : Defines the entry point for the console application. // #include <stdafx.h> #include <stdlib.h> /*This header is for rand srand code)*/ int main (void) { unsigned int seed; int i,run=0; printf("Choose a level of difficulty"); scanf("%d", &seed); /*&seed is for "unsigned" int*/ printf("\n"); srand(seed); /*generate a number 0-10*/ i=1+(int) (10.0*rand()/(RAND_MAX+1.0)); /*if a number is 1, beep sound comes out*/ if(i==1) for(int j=0; j<i; j++) printf("\a"); return 0; }

専門家に質問してみよう