• ベストアンサー

ある値に対して違う値を返させるには?

はじめまして。JavaScript初心者のものです。 ただ今、大学のJavaScriptの授業で自由課題に取り組んでいるのですが、 初歩的なところで詰まっています。 タイトルでは少し分かりづらいので、コードを提示して説明いたします。 <SCRIPT language="JavaScript"> <!-- seikaiA = Math.ceil( Math.random() * 4 ); if( seikaiA == 0 ) seikaiA = 1; seikaiB = Math.ceil( Math.random() * 4 ); if( seikaiB == 0 ) seikaiB = 1; if( seikaiB == seikaiA ) seikaiB = ●●●; document.write( '<Table border=1>' ); document.write( '<TR><TD>'+seikaiA+'</TD><TD>'+seikaiB+'</TD></TR>' ); --> </SCRIPT> これは、1~4までの数字からひとつ、整数でランダムに取り出し、 「seikaiA」および「seikaiB」に代入しているところです。 ところがこのままでは「seikaiA」の値と「seikaiB」の値が同じになるケースが当然生じます。 私は両者の値を互いに異なる値として出力したいので、 if文にて、同じになった場合再びseikaiBを選び直すように命令したいのですが、 うまくいきません。 ●●●と書かれた部分がそうです。 どのようにプログラミングすれば、「seikaiA」と「seikaiB」の値を常に異なるものとして出力することが出来るのでしょうか? 初歩的なことを質問して申し訳ないのですが、よろしくおねがいします。

  • abr
  • お礼率72% (8/11)

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

手っ取り早いのは、同じ値だったら、再度乱数を計算するようループを実行する方法でしょうか。 seikaiB = seikaiA; while ( seikaiA == seikaiB ){ seikaiB = Math.ceil( Math.random() * 4 ); if( seikaiB == 0 ) seikaiB = 1; } トランプ・カードのシャッフルの実現みたいのだと、配列を使ったりもします。

abr
質問者

お礼

うまくいきました。ありがとうございました。 シャッフルの基にもなっているのですね。

その他の回答 (1)

noname#199778
noname#199778
回答No.1

●●●と書かれた部分だけに修正を加えて、全体の処理を目的通りにうまく完了させるようにしなければならないのでしょうか? もしそうでなければ、seikaiBを生成する部分を関数として定義して、seikaiBとseikaiAが同じになった場合には、再度seikaiBを生成する関数を呼び出すような形にしてみてはいかがでしょう。 質問文にあるスクリプトだと、seikaiBがseikaiAと一致する場合にどういう処理を挟もうとしているのかがわからないので、何がどううまくいかなくて困っているのかを的確に把握しきれないのですが… 見当違いでしたらごめんなさい。 課題がんばってください。

abr
質問者

お礼

回答ありがとうございました。 分かりづらい部分もあり、すみませんでした(汗)。 課題がんばります! ありがとうございました。

abr
質問者

補足

早速の回答ありがとうございます。 すみません、限定的な書き方をしていました。 seikaiAとseikaiBの値が違う様に出来ればよいです。 仰るように関数を生成してみたのですが、やはり同じ値になってしまうことがあります。 function B() { var seikaiA, seikaiB; seikaiB = Math.ceil( Math.random() * 4 ); if( seikaiB == 0 ) seikaiB = 1; if( seikaiB == seikaiA ) seikaiB = B(); return( seikaiB ); } seikaiA = Math.ceil( Math.random() * 4 ); if( seikaiA == 0 ) seikaiA = 1; seikaiB = Math.ceil( Math.random() * 4 ); if( seikaiB == 0 ) seikaiB = 1; if( seikaiB == seikaiA ) seikaiB = B(); document.write( '<Table border=1>' ); document.write( '<TR><TD>'+seikaiA+'</TD><TD>'+seikaiB+'</TD></TR>' ); おそらく関数の使い方が誤っているか、不要なスクリプトがあるのではないかと思いますが、 どこをどうすればよいのか、私には分かりません。 ヘッポコで本当申し訳ありません(汗)。よろしくお願いします。

関連するQ&A

  • n回繰り返し書き出す

    例えば、 <TABLE border=1> <TR> <TD></TD> </TR> </TABLE> このような表を表示させたい場合、JavaScriptで <SCRIPT language="JavaScript"> <!-- document.write("<TABLE border=1><TR>"); document.write("<TD></TD>"); document.write("</TR></TABLE>"); --> </SCRIPT> このようにすると可能だと思うのですが、 <TABLE border=1> <TR> <TD></TD> <TD></TD> <TD></TD> </TR> </TABLE> このような場合や、あるいは <TD></TD> が20も30もあるような場合、最初の方法ですと、どうも非合理的に思えてなりませんし、 方法も絶対にあるようにも思えます。 このケースでいう、<TD></TD>をn回繰り返して表示させる。 というときには、どのように記述すればよいのでしょうか。 基本的なことを知らずに色々やってみているのですが、どうもわかりません。 おわかりになられる方、どうかご教授願います。

  • テーブルもしくセルの背景をランダムにしたいがうまくいかない

    テーブルの背景を表示のたびに変えたいと思っています。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=171099&rev=1 この記事を参考にしました。 用意している壁紙は7枚で画像ファイルは0~7.gifとしています。 記述するhtmlファイルと同じ階層にhaikeiフォルダを置き、その中に0~7.gif画像を入れました。画像の大きさは200*150で統一しています。 <SCRIPT LANGUAGE="JavaScript"> <!-- var imgback = "haikei/" ; var imgno = (Math.floor(Math.random() * 6) + 1) ; document.write("<TABLE frame=\"void\" cellpadding=\"0\" width=\"200\" height=\"150\" background = ", imgback+imgno ,".gif>"); document.write("<TR><td align=\"center\">hallo!</TD></TR>"); document.write("</TABLE>"); //--> </SCRIPT> ランダムにならないどころか何も表示されません。 どこがどう間違っているのでしょうか。

  • 外部ファイルを利用したい

    現在、Webの勉強を始めたのですが、自分でいろいろ作成していてうまくいかないので、教えて下さい。 htmlファイルが幾つかあるのですが、全てのページに同じテーブルタグを使用するので、JavaScriptの外部ファイルで書き出してそれぞれを各htmlファイルで呼び出そうと思っていますが、うまくいきません。 ★jsファイル/xx.js★ <SCRIPT language="JavaScript"><!-- document write("<table border='1'"); document write("<tr><td><img src='xx.gif'></td></tr>"); document write("</table>"); --> ★htmlファイルでの呼び出し★ <html> <head><title>外部ファイル呼び出し</title></head> <body><script language="JavaScript" src="xx.js"></script> </body></html> かなり素人なので変な書き方をしていると思いますが、ご指導お願いします。

  • JavascriptからJavaへの変え方

    Javascriptで作ったものをJavaにしないといけなくなったのですが 私はJava初心者でまったくわかりません。 色々ネットで調べてみたのですが、どうも難しくて理解することができませんでした。 下にJavascriptで作ったものを載せてるのですがどなたかやり方を教えてもらえないでしょうか? <html> <head> <title>サンプル</title> <script type="text/javascript"> function jikoku() { dd = new Date(); document.F1.T1.value = dd.toLocaleString(); window.setTimeout("jikoku()", 1000); } </script> <script type="text/javascript"> mes = new Array(5); mes[0]="0"; mes[1]="1"; mes[2]="2"; mes[3]="3"; mes[4]="4"; date=(new Date()).getHours(); if( 0 <= date && date <= 5 ){ document.write(mes[0]); } else if( 6 <= date && date <= 10 ){ document.write(mes[1]); } else if( 11 <= date && date <= 16 ){ document.write(mes[2]); } else if( 17 <= date && date <= 19 ){ document.write(mes[3]); } else{ document.write(mes[4]); } </script> <script type="text/javascript"> function Random() { var kazu = Math.random(); kazu = kazu*100; kazu = Math.ceil(kazu); if( kazu<=9 ) document.write('<br/>○1<br/>'); else if( kazu<=19 ) document.write('<br/>○2<br/>'); else if( kazu<=29 ) document.write('<br/>○3<br/>'); else if( kazu<=39 ) document.write('<br/>○4<br/>'); else if( kazu<=49 ) document.write('<br/>○5<br/>'); else if( kazu<=59 ) document.write('<br/>○6<br/>'); else if( kazu<=69 ) document.write('<br/>○7<br/>'); else if( kazu<=79 ) document.write('<br/>○8<br/>'); else if( kazu<=89 ) document.write('<br/>○9<br/>'); else document.write('<br/>○10<br/>'); } Random() </script> <script language="JavaScript"> var imglist = new Array( "sample1.jpg", "sample2.jpg", "sample3.jpg", "sample4.jpg" ); var selectnum = Math.floor((Math.random() * 100)) % imglist.length; var output = "<img src=" + imglist[selectnum] + ">"; document.write(output); </script> </head> </html>

  • プルダウンの値とJavaScript

    下記のようなソースでHTMLのID、パスワードを入力しログを閲覧する画面を作成しました。 プルダウンで今月のログか先月のログを選択するようにしたいと思いますが、 value値の所にJavaScriptの値を入力したいと思っていますが上手くいきません。 具体的には、<OPTION value="1">の1の代わりにdlogの値を<OPTION value="2">の2の 代わりにllogの値を入力したいと思っています。 宜しくお願い致します。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> <SCRIPT Language="JavaScript"> <!-- myDate = new Date(); myYear =1900+(myDate.getYear()%1900); dYear =(myDate.getYear() % 100); myMonth =myDate.getMonth() + 1; lastMonth =myDate.getMonth(); if (myMonth<10){ dtMonth=("0"+(myDate.getMonth()+1)); } else {dtMonth =myMonth; } if (myMonth<10){ dlMonth=("0"+(myDate.getMonth())); } else {dlMonth =(myDate.getMonth()); } dlog =(dYear+""+dtMonth+"_log.txt"); if (myMonth == 1){ llog=(dYear-1+""+"12_log.txt"); } else {llog=(dYear+""+dlMonth+"_log.txt"); } // --> </SCRIPT> </HEAD> <BODY> <P align="center"><FONT size="+2"><B>ログファイル閲覧メニュー</B></FONT></P> <HR width="75%"> <form action="../cgi-bin/mail/mail.cgi" method="post"> <CENTER> <TABLE border="0"> <TBODY> <TR> <TD>User ID:</TD> <TD colspan="2"><INPUT size="24" type="text" name="u_id"></TD> </TR> <TR> <TD>Pass Word:</TD> <TD colspan="2"><INPUT size="24" type="password" name="pass"></TD> </TR> <TR> <TD>表示するログ</TD> <TD><SELECT name="log"> <OPTION value="1"> <SCRIPT Language="JavaScript"> <!-- document.write("今月:",myYear,"年",myMonth,"月"); // --> </SCRIPT> </OPTION> <OPTION value="2"><SCRIPT Language="JavaScript"> <!-- if (myMonth == 1){ document.write("先月:",myYear-1,"年12月"); } else {document.write("先月:",myYear,"年",lastMonth,"月"); } // --> </SCRIPT> </OPTION> </SELECT></TD> <TD><INPUT type="submit" name="submit" value="閲覧"></TD> </TR> </TBODY> </TABLE> </CENTER> </FORM> </BODY> </HTML>

  • ジャバスクリプトでカレンダーを表示の際に3月をMarchと表示したい

    よろしくお願いします。 JavaScriptのカレンダーのタグでどうしても分からないことがあり質問します。 普通は、今日の日付だと、 2005年 3月17日 木曜日 となりますが、 これを March 2005 17 Thursday としたいです。 下記はいま悩んでいるタグです。 <SCRIPT Language="JavaScript"> <!-- ar1=new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"); kyou = new Date(); yy = kyou.getFullYear(); mm = kyou.getMonth() + 1; dd = kyou.getDate(); dan = kyou.getDay(); da = ar1[dan]; ym = mm + ""+ yy + "" dd1 = dd + "" da1 = "(" + da + ")" document.write("<table border=0 ><tr>"); document.write("<td background='.gif' WIDTH=50 HEIGHT=50>"); document.write("<table border=0 WIDTH=79 HEIGHT=89><tr>"); document.write("<td ALIGN='center'><font size=2>"); document.write(ym); if (dan == 0 ){document.write("<font color=#FF3366>")}; if (dan == 6 ){document.write("<font color=#00CCCC>")}; document.write("<br><font size=4><b>") document.write(dd1); document.write("</b></font><br>") document.write(da1); if (dan == 0 || dan == 6){document.write("</font>")}; document.write("</font></td></tr></table>"); document.write("</td></tr></table>"); //--> </SCRIPT> いろいろタグを触りましたが、 3 2005 17 (Thursday) というここまでしか分かりません。 12ヵ月分のタグをどこに入れればいいでしょうか? どうかアドバイスをください。 よろしくお願いします。

  • タグ組み、教えて下さい。

    ランダムにメッセージを表示する・・というのに挑戦中ですが、メッセージが出ません。 私の作ったソースは、こういうのです↓ ************************************************** <html> <head><title>占いの館^_^</title></head> <body background="image/0023.jpg"text="#000000"> <table><tr><td><img src="image/0024.gif"wigth="239"height="467"></td><td align="middle"> <SCRIPT language="JavaScript"> msg=new Array(); msg[0]="大吉"; msg[1]="中吉"; msg[2]="小吉"; msg[3]="吉"; msg[4]="凶"; i=Math.floor(Math.random() * msg.length); document.write(msg[i]);      </SCRIPT>   </td></tr></table> </center></body></html> ************************************************** 間違いが分からなくて、詰まってます>_< よろしくお願いします。。。

  • document.write内のタグ

    <SCRIPT LANGUAGE="JavaScript"> <!-- // 曜日よって文字を変える w = (new Date()).getDay(); if(w == 0) document.write(" ・・・・・・"); ・・・・・・ ・・・・・・ //--> </SCRIPT> 曜日によって表現(文章など)をかえるスクリプトですが、(" ・・・・・・"); の中のタグをわかりやすいように改行したりすると、表示自体されなくなります。また、 <tr><td></td></tr> <tr><td></td></tr> というように空白をあけると妙に行間があいてしまいます。 スクリプトがちゃんと表現されるようにするための解決策はわかってますが、改行してわかりやすいようにタグを整列させたいのです。その方法というのはあるのでしょうか? よろしくお願いします。

  • テーブルとテーブルの間の隙間

    以下の様なHTMLでIE6で表示した場合、●Aと●Bの間に、微妙な隙間が入ってしまいます。 どうやっても隙間が無くなりません。 ●Aの部分には、画像がランダムに表示されるようなスクリプトを記述していますが、 そのスクリプトを削除したら、ちゃんと隙間が無くなるのです(^^;) これって方法はありますか?どうにかランダムに表示させたいので、アドバイス下さい。 ============================ <script language="javascript" src="../js/top.js"></script> </HEAD> <BODY topmargin="0"> <DIV align="center"> <TABLE border="0" cellspacing="0" cellpadding="0"> <TBODY> ●A <TR> <TD width="800"><SCRIPT LANGUAGE="JavaScript">random_img2()</SCRIPT> <noscript><IMG src="../img/1.jpg" alt="" width="800" height="300"></noscript></TD> </TR> ●B <TR> <TD width="800"><A href="../index.html">HOME</A> &gt;&gt; TEST</TD> </TR> </TBODY> </TABLE> ============================ ※実際のHTMLには●Aと●Bという文字は入っておりません。 以下はtop.jsで記述している内容です。 ============================ function random_img1(num1,num2) { if((num1 - num2) > 0) { var big = num1 var small = num2 } else { var big = num2 var small = num1 } var range = big - small + 1 var number = Math.floor(Math.random()*range) + small return(number) } function random_img2() { var img_src = "../img/" + random_img1(1,3) + ".jpg" document.write("<IMG SRC='" + img_src + "'>") } ============================

    • ベストアンサー
    • HTML
  • JavaScriptでイベントまでのカウントを作りたい。

    教えてください。JavaScript初心者です。 JavaScriptでイベントまでのカウントを作りたいのですが、 日にちを画像でだして、指定した日がきたら、画像で差し替えるようにしたいのですが、どうすればいいのでしょうか? ※現在は指定した日がきたら、「おめでとう」の文字がでるようにしてます。 書いたタグは下記になります。 アドバイスをお願いします。 <script language="JavaScript"><!-- var now = new Date(); var point = new Date(2009,8-1,25); var countdown = Math.ceil( ( point.getTime() - now.getTime() ) / (1000*60*60*24) ); if(countdown > 0) { document.write('countdown '); } else { document.write('おめでとう!'); } // --></script>

専門家に質問してみよう