-PR-
解決済み

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

  • すぐに回答を!
  • 質問No.461894
  • 閲覧数45
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 72% (8/11)

はじめまして。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」の値を常に異なるものとして出力することが出来るのでしょうか?

初歩的なことを質問して申し訳ないのですが、よろしくおねがいします。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル14

ベストアンサー率 42% (1231/2878)

手っ取り早いのは、同じ値だったら、再度乱数を計算するようループを実行する方法でしょうか。

seikaiB = seikaiA;
while ( seikaiA == seikaiB ){
seikaiB = Math.ceil( Math.random() * 4 );
if( seikaiB == 0 ) seikaiB = 1;
}

トランプ・カードのシャッフルの実現みたいのだと、配列を使ったりもします。
お礼コメント
abr

お礼率 72% (8/11)

うまくいきました。ありがとうございました。

シャッフルの基にもなっているのですね。
投稿日時 - 2003-02-02 16:13:46

その他の回答 (全1件)

  • 回答No.1

●●●と書かれた部分だけに修正を加えて、全体の処理を目的通りにうまく完了させるようにしなければならないのでしょうか?

もしそうでなければ、seikaiBを生成する部分を関数として定義して、seikaiBとseikaiAが同じになった場合には、再度seikaiBを生成する関数を呼び出すような形にしてみてはいかがでしょう。

質問文にあるスクリプトだと、seikaiBがseikaiAと一致する場合にどういう処理を挟もうとしているのかがわからないので、何がどううまくいかなくて困っているのかを的確に把握しきれないのですが…

見当違いでしたらごめんなさい。 課題がんばってください。
補足コメント
abr

お礼率 72% (8/11)

早速の回答ありがとうございます。
すみません、限定的な書き方をしていました。
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>' );


おそらく関数の使い方が誤っているか、不要なスクリプトがあるのではないかと思いますが、
どこをどうすればよいのか、私には分かりません。

ヘッポコで本当申し訳ありません(汗)。よろしくお願いします。
投稿日時 - 2003-02-02 15:58:16
お礼コメント
abr

お礼率 72% (8/11)

回答ありがとうございました。
分かりづらい部分もあり、すみませんでした(汗)。
課題がんばります! ありがとうございました。
投稿日時 - 2003-02-02 16:16:12


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


開業・独立という夢を持つ人へ向けた情報満載!

ピックアップ

ページ先頭へ