《Javascriptのif文が反応しない》

解決済

回答 5

投稿

  • 評価
  • クリップ 2
  • VIEW 345
退会済みユーザー

退会済みユーザー

《Javascriptのif文が反応しない》
Javascript初心者です。Javascriptのif文で下記のような文言を出したいと思うのですが、「同じ値」のメッセージが出てくれません。詳しい方、ご教授願います。

rand1:●(※0~2までのランダムな数字)
rand2:●(※0~2までのランダムな数字)
「rand1の方が大きい」「rand2の方が大きい」「同じ値」のいずれかがメッセージとして出る

以下、ソースコードです。

<!DOCTYPE html>
<html lang="ja">
<head>
   <meta charset="UTF-8">
   <title>if</title>
</head>
<body>
<script>
   var rand1=Math.floor(Math.random()*3)
   var rand2=Math.floor(Math.random()*3)
   document.write("<p>rand1:"+rand1+"</p>");
   document.write("<p>rand2:"+rand2+"</p>");

   if(rand1>=rand2){
       document.write("rand1の方が大きい値です");
   }
   else if(rand1<=rand2){
       document.write("rand2の方が大きい値です");
   }
   else if(rand1===rand2){
       document.write("2つは同じ値です");
   }
</script>
</body>
</html>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+3

if(rand1>=rand2)となっていますので、等しい場合もこの条件に合致してしまいます。rand1 > rand2として等しい場合を除外しましょう(あとのrand1<=rand2も同じ)。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/28 12:30

    初歩的な質問で申し訳ありませんが、document.writeの代わりはconsole.logですか?調べると innerHTMLというのも出てきて違いがよくわかりません…。

    キャンセル

  • 2019/05/28 12:51

    console.logはデバッグ出力用の関数です。

    HTMLに書き出したい場合は、textContentやinsertBeforeといったDOMを使う、あるいはjQueryなどライブラリを使う形がいいでしょう(innerHTMLは、HTMLを出力する形になるので、不用意にHTMLが書き換えられるリスクがあり、使用には注意が必要です)。

    キャンセル

  • 2019/05/28 13:02

    ありがとうございます。初心者すぎて仰っている内容がまだあまり理解できておりませんが、調べて少しずつものにしたいと思います。

    キャンセル

+1

ひとつめとふたつめのifに=がついてるからですね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/28 12:16

    回答ありがとうございました。参考にさせていただきます。

    キャンセル

+1

条件式が以上・以下になっているから、最後のelse ifは絶対に通らないからです。
つまり、以上(>=)と以下(<=)は、等価(==)も含みの条件式だからです。
正しくは下記です。

var rand1=Math.floor(Math.random()*3)
var rand2=Math.floor(Math.random()*3)
document.write("<p>rand1:"+rand1+"</p>");
document.write("<p>rand2:"+rand2+"</p>");

if(rand1>rand2){
  document.write("rand1の方が大きい値です");
}else if(rand1<rand2){
  document.write("rand2の方が大きい値です");
}else if(rand1===rand2){
  document.write("2つは同じ値です");
}

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/28 12:16

    回答ありがとうございました。参考にさせていただきます。

    キャンセル

+1

条件式が以上(>=)と以下(<=)なので
if(rand1>=rand2){rand1rand2
同じ数値でも条件に一致してしまいます。

以下のようにより大きい(>)と未満(<)にすれば正しく動作します。

var rand1 = Math.floor(Math.random() * 3);
var rand2 = Math.floor(Math.random() * 3);
document.write("<p>rand1:" + rand1 + "</p>");
document.write("<p>rand2:" + rand2 + "</p>");

if (rand1 > rand2) {
  document.write("rand1の方が大きい値です");
} else if (rand1 < rand2) {
  document.write("rand2の方が大きい値です");
} else {
  document.write("2つは同じ値です");
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/28 12:16

    回答ありがとうございました。参考にさせていただきます。

    キャンセル

-1

else if( rand1 === rand1 ){...}

としてみて、これでもおかしいなら何かが変。
もし、上記でうまくいくなら単に 「それぞれ別の数字」ってだけでしょうね。


[追記0]

...って思ったら、ほかの方々のを閲覧すると、確かに。

よく考えたらそうですね。
if文ですでに処理されているから。ですね。

例えば rand1 = rand2 で、rand1 = 10 としますね。(つまりrand1,rand2ともに10)

最初のチェックである rand1>=rand2 です。

「rand1がrand2と同じか、大きい場合」ですので、処理されます。
(だって rand1 == rand2 だし )

すると、ほかのelseとかには用はないのでifを抜ける。

だから rand1 === rand2 まで到達しない。

だから、数直線で考えてみると、

比較相手を含まない方が無難。

だから

if( rand1 <= rand2 )...

とかじゃなくて、

if( rand1 < rand2 )...

のようにする。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/05/28 12:16

    回答ありがとうございました。参考にさせていただきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる