• 締切済み

0だけは5回中1回表示し、他は条件なしのランダムで

0~20の数字があります。 1つの数字だけを表示させます。 0以外の全ての数字はランダムに表示します。 0は5回中1回表示させるようにしたいです。 fff(0); function fff(b){ if(b%5 == 0){ a=0; }else{ a = Math.floor(Math.random() * 20) + 1; } alert(a); b++; setTimeout('fff(' + b + ')', 2000); } では1~20までの数字がランダムに表示されますが、 0が表示されるタイミングが決まってしまいます。 もっと上手にするためにはどうしたらよいのでしょうか。

みんなの回答

回答No.4

1から20までの、はいれつをよういし、しゃっふるします。 5こかんかくで、そのなかにてきとうに0をそうにゅうします あとは、はいれつのあたまからとりだす。 はいれつがなくなったら、つくりなおす function random () {  var ary = [];  function range (a, b) {   var ary =[];   var i;      for (i = a; i <= b; i++) {    ary.push (i);   }   return ary;  }    function randomInt (n) {   return Math.floor (Math.random () * n);  }    function shuffle (ary) {   var len = ary.length;   var i, n, m;      for (i = len; i; ) {    n = randomInt (i--);    m = ary[i];    ary[i] = ary[n];    ary[n] = m;   }   return ary;  }    function ikasama (ary) {   var insertAry = [0,0,0,0];   var len = insertAry.length;   var span = 5;   var i;      for (i = 0; i < len; i++) {    ary.splice (i * span + randomInt (span), 1, insertAry[i]);   }      return ary;  }  function reset () {   ary = ikasama (shuffle (range (1, 20)));   alert(ary);  }    return function () {   if (0 === ary.length) {    reset ();   }      return ary.shift ();  }; } var next = random (); setInterval (function () { alert (next ()); }, 1000); </script> -- いけてないけど <script type="application/javascript; version=1.8"> var random = (function ikasama () {  function randomInt (n) Math.random () * n | 0  function range (a, b) { for (; a <= b;) yield a++ }  function shuffle (ary) { let n; while (0 < (n = ary.length)) yield ary.splice (randomInt (n), 1) }  function ikasama (a,b) this.ary.splice (this.span * b + randomInt (this.span), 1, a)    var r;  var ary = [x for each (x in range (1, 20)) ];  var buf = [];  var insertAry = [0,0,0,0];    while (true) {   if (buf.length < 1) {    buf = [x for each (x in shuffle (ary)) ];    insertAry.forEach (ikasama, { ary: buf, span: 5 });   }     yield buf.shift ();  } }) (); setInterval (function () { alert (random.next ()); }, 1000); </script>

  • honeborn
  • ベストアンサー率100% (4/4)
回答No.3

こんな感じかな。 var a = Math.floor(Math.random()*5); for(var i=0; i<=4; i++){ if(i==a){ alert(0); continue; }; alert(Math.floor(Math.random()*20+1)); };

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

>もっと上手にするためにはどうしたらよいのでしょうか。 上手にといっても、『5回中1回』という意味をどう捉えるかによって変わってくるかと思います。 ご提示の方法は必ず5回おきに0が表示されますので、『5回中1回』の典型といえます。 確率的に『5回中1回』でよいのなら、0~4の乱数(整数)を発生させて、0だったら0それ以外は1~20。これだと、0が出ないことが何回も続いたり、連続して0が出る可能性はありますが、十分大きな回数繰り返せば確率的に『5回中1回』。 5回ごとに0~4の乱数を発生し次に0を出す順番を設定するという方法も考えられます。これだと9回以上連続して0が出ないということがなくなります。もちろん『5回中1回』となります。 このような考えを複合したような方法も考えられるとは思いますが、基本的に質問者様の『5回中1回』ということの意味によると思います。

  • joqr
  • ベストアンサー率18% (742/4026)
回答No.1

ヒント 1-20の乱数と 0-4の乱数を作れば?

関連するQ&A

  • 【数字ランダム】計算問題ランダム計画

    1から10の乱数を使った 足し算、引き算を考えていまして、 ダイナミックテキスト(mondai)に 式と答えを表示。 同じ数字の組み合わせの問題が続けて出るので それを回避するために、 皆様のお知恵をお借りしたいと思いました。 自分が考えている回路図は、 //乱数[0-9] randam_a = Math.floor(Math.random()*10); randam_b = Math.floor(Math.random()*10); //足し算か引き算か計算ちぇっく check = Math.floor(Math.random()*2); ※このあたりに前回のrandam_a & randam_bの 値を調べて同じならば、前回と違う値が入るまで loop処理を加える。 //足し算ならば if (check == 0){   total = randam_a - randam_b ;   mondai = String(randam_a)+"+"+String(randam_b)+"="+String(total); //引き算ならば } else if (check == 1) {    total = randam_a + randam_b ;    mondai = String(randam_a)+"-"+String(randam_b)+"="+String(total); //引き算の処理ならば }else if (check == 1){ (略してます) } という流れを考えてます。 それ以外に、いけそうな処理の流れが あれば、そのチャートも知りたいので 解説して頂けると勉強になります>< 宜しくお願いします!

    • ベストアンサー
    • Flash
  • 2件一組の文章をランダムに表示する。

    お世話になっております。 早速ですが、A~Dの文章を2件ランダムに表示させたいです。 更新の度に表示される文章を変えたいのです。 ランダムに文字を並べ替えるコトは出来たのですが、 ソコから2件だけ抜き出すのができません。 <script language="javascript"> arr = ["ほげほげA","ほげほげB","ほげほげC","ほげほげD"]; function a(){ for(i=0; i<arr.length; i++){ k = i; k = Math.floor(Math.random()*arr.length); tmp = arr[i]; arr[i] = arr[k]; arr[k] = tmp; } } function b(){ a(); for(j=0; j<arr.length; j++){ document.write(arr[j]); } } b(); </script> ■1回目 ほげほげC ほげほげA ■2回目 ほげほげA ほげほげD のような感じです。 ご助力お願いいたします!

  • ランダム表示とリンクの貼り付け

    数百の画像を、ランダムにダブらないで表示させるのはできたのですが (画像名は整理しやすい0000.jpg~0100.jpgとしました) <script type="text/javascript"><!-- x=Math.floor(Math.random()*100); x=new String(x); if (x.length==1){ x="000"+x;} else if (x.length==2){ x="00"+x;} else if (x.length==3){ x="0"+x;} RndImg= new Image(); RndImg.src="images/image"+x+".jpg"; NoMem[n]=x;} //↑これって同じ画像が重複しないように。の意味でいいんですか? function ImgDisp(){ document.images["imgs0"].src=RndImg.src; } window.onload=ImgDisp; //--></script> <body> <img src="*" name="imgs0"> </body> 一つ一つの画像にそれぞれリンクを貼りたいと思います。 どこに何を入れたらいいでしょうか? それと ランダムにする画像を3つくらい並べたいのですが <img src="*" name="imgs0"> だと1つしかランダムにならずに、 あとの2つは画像が表示されません。 何を変えたらいいでしょうか? よろしくお願いします。

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

    ランダムでシーンの移動をやりたくて、 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
  • ランダムに問題を出すプログラム

    ランダムに問題を出すプログラムを作ろうとしています。 合っていれば次の問題をランダムに、間違っていれば合うまで同じ問題を出したいです。 <SCRIPT language="javascript"> m1=new Array(); m2=new Array(); 中略 </SCRIPT> m=Math.floor(Math.random()*37) document.write(m1[m]); <FORM onSubmit="if (this.elements[0].value==m2[m]) {alert('正解です!')} else ( alert('間違い'))"> <INPUT type="text" value=""> <INPUT type="submit" value="入力後ここを押す"> </FORM> </SCRIPT> これだと、合っていても間違っていても次は新たにランダムで選ばれた問題がでます。 どういう処理をしたらいいでしょうか? どうかお願いいたします。

  • 背景ランダム

    JavaScriptを使って背景をランダムに変更したいので すが、その背景ごとにを左上固定や縦リピートなど を設定することは出来るのでしょうか? 宜しくお願い致します ちなみにCSSは基本だけですが理解しています <SCRIPT LANGUAGE="JavaScript"> <!-- function randomWall() { if (navigator.appVersion > '5' || (navigator.appName == 'Microsoft Internet Explorer' && navigator.appVersion > '4')) { var max = 6; wall = Math.floor(Math.random() * max) + 1; if (wall == 1) { document.body.background = '1.gif' } else if (wall == 2) { document.body.background = '2.gif} } } //--> </SCRIPT>

  • ランダムJavascriptのblank表示

    リンク先のURLをランダムで表示させるため、下記の様に読み込みjavascriptファイルを使用していますが、ターゲットをブランク表示にできません。 windowopenなどと併用する必要があるのか、あまりjavascriptに詳しくないため、 記載箇所を具体的に教えて頂けると嬉しいです。 ■JSファイル側 urls=new Array(); //ランダムで表示したいURLを指定する urls[0]='http://www.・・・'; urls[1]='http://www.・・・; urls[2]='http://www.・・・'; function random() { a=Math.floor(Math.random()*urls.length); location.href=urls[a]; } ■HTMLページ側 <a href="JavaScript:random();">リンクテキスト</a>

  • ランダムで文字を表示

    ランダムで文字を表示 よろしくお願いします m(__)m 現在以下のように複数のテキストの中からランダムで3つずつ表示しています。 <!-- A=6 moji=new Array(A) moji[1]="<A href='http://www.●●●.com/'>あいうえお</A>"; moji[2]="<A href='http://www.■■■.com/'>かきくけこ</A>"; moji[3]="<A href='http://www.▲▲▲.com/'>さしすせそ</A>"; moji[4]="<A href='http://www.○○○.com/'>たちつてと</A>"; moji[5]="<A href='http://www.□□□.com/'>なにぬねの</A>"; moji[6]="<A href='http://www.△△△.com/'>はひふへほ</A>"; I= Math.floor(Math.random ()*A+1) ; //--> <!-- for(i=I;i<=I+2;i++){    if ( i<=6 ){ document.write(moji[i]+"<BR>"); }    else{ document.write(moji[i-5]+"<BR>"); }    } //--> 質問なのですが、最後から3行目 [i-5] の5は何を意味しているのでしょうか? javascriptは自分で作る事ができず、どこかで見つけたものを少しずついじる程度しか知識がありません。 どうぞよろしくお願いします。

  • スライドショーにフェード効果と再ランダム表示を…

    前回、重複しない画像選びを教えて頂き、その後の続きを頑張ってみましたが 策が尽きてしまいました。皆様のお力をお借りできないでしょうか。 【※現在の状況】 ・[A]→[B1]→[B2]→[C]の順番で再生 ・[A] [C]は固定(指定)画像を表示、[B1] [B2]はB1~5.jpgの中からランダムに表示し、重複選択を回避しています。 上記にさらに下記機能をプラスしたいと思っております。 【実現したいこと】 ・クロスフェード(またはフェードイン、アウト)を実装したい。 ・初回再生時にランダムで取得した画像を、リピート再生時にもう一度ランダム読込み表示させたい。 形式は上記内容を踏まえた物であれば、まったく違うものになっても構いません。 どうか助けて頂けないでしょうか。よろしくお願い致します。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>SLIDESHOW</title> <script type="text/javascript" src="http://medienfreunde.com/lab/innerfade/js/jquery.js"></script> <script type="text/javascript" src="http://medienfreunde.com/lab/innerfade/js/jquery.innerfade.js"></script> <SCRIPT LANGUAGE="JavaScript"> <!-- var imgA = ["images/A.jpg"],    imgB = new Array(); imgB[0] = "images/B1.jpg"; imgB[1] = "images/B2.jpg"; imgB[2] = "images/B3.jpg"; imgB[3] = "images/B4.jpg"; imgB[4] = "images/B5.jpg"; var n1 = Math.floor(Math.random()*imgB.length); while ( true ) { var n2 = Math.floor(Math.random()*imgB.length); // n1とn2がちがっていればループ終了 同じの場合はもう一度ランダム実行 if ( n1 != n2 ) break; }   imgC = ["images/C.jpg"]; cnt = 0; interval = 1000; function img_slide(){ //以下枚数分繰り返し if(cnt==0) {document.show.src=imgA; cnt++; }else if(cnt==1) {document.show.src=imgB[n1]; cnt++; }else if(cnt==2) {document.show.src=imgB[n2]; cnt++; }else if(cnt==3) {document.show.src=imgC; cnt=0; } } function img_move(){ img_slide(); timerID = setTimeout("img_move()",interval); } // --> </SCRIPT> </head> <body onload="img_move()"> <div> <img src="images/A.jpg" name="show" width="300" height="250" > </div> </body> </html>

  • 配列変数に重複のないランダムな数字を入れて行くには?

    JavaScript初心者です。 配列にランダムな数字を入れたいのですが、 aRnd = new Array(); aRnd[0] = Math.floor(Math.random()*100); aRnd[1] = Math.floor(Math.random()*100); aRnd[2] = Math.floor(Math.random()*100); のようにやると各配列にはランダムな数字が入りますが、重複が発生する可能性があります。これを重複が発生しないようにしたいのですが、どのようにすればいいのでしょうか? なお、上記例では0~99までの数字を3つの配列にセットする方法となっていますが、配列数や数字の最大値は変更する可能性があるので、これも配慮したいと思います。 よろしくお願いいたします。

専門家に質問してみよう