質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

5回答

3069閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

2クリップ

投稿2019/05/28 02:39

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

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

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

html

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>if</title> 6</head> 7<body> 8<script> 9 var rand1=Math.floor(Math.random()*3) 10 var rand2=Math.floor(Math.random()*3) 11 document.write("<p>rand1:"+rand1+"</p>"); 12 document.write("<p>rand2:"+rand2+"</p>"); 13 14 if(rand1>=rand2){ 15 document.write("rand1の方が大きい値です"); 16 } 17 else if(rand1<=rand2){ 18 document.write("rand2の方が大きい値です"); 19 } 20 else if(rand1===rand2){ 21 document.write("2つは同じ値です"); 22 } 23</script> 24</body> 25</html> 26

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

ベストアンサー

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

投稿2019/05/28 02:50

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2019/05/28 02:52

本題ではありませんが、document.writeはかなり古い書き方です。何かのテキストに沿って進めているのであれば、もっと新しい書き方のものを参考にしたほうがいいでしょう。
退会済みユーザー

退会済みユーザー

2019/05/28 03:15

回答ありがとうございました。+aのご指摘もくださったのでベストアンサーにさせていただきます。
退会済みユーザー

退会済みユーザー

2019/05/28 03:30

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

2019/05/28 03:51

console.logはデバッグ出力用の関数です。 HTMLに書き出したい場合は、textContentやinsertBeforeといったDOMを使う、あるいはjQueryなどライブラリを使う形がいいでしょう(innerHTMLは、HTMLを出力する形になるので、不用意にHTMLが書き換えられるリスクがあり、使用には注意が必要です)。
退会済みユーザー

退会済みユーザー

2019/05/28 04:02

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

0

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

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

javascript

1var rand1 = Math.floor(Math.random() * 3); 2var rand2 = Math.floor(Math.random() * 3); 3document.write("<p>rand1:" + rand1 + "</p>"); 4document.write("<p>rand2:" + rand2 + "</p>"); 5 6if (rand1 > rand2) { 7 document.write("rand1の方が大きい値です"); 8} else if (rand1 < rand2) { 9 document.write("rand2の方が大きい値です"); 10} else { 11 document.write("2つは同じ値です"); 12}

投稿2019/05/28 02:56

yasutomi

総合スコア2937

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/28 03:16

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

0

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

javascript

1var rand1=Math.floor(Math.random()*3) 2var rand2=Math.floor(Math.random()*3) 3document.write("<p>rand1:"+rand1+"</p>"); 4document.write("<p>rand2:"+rand2+"</p>"); 5 6if(rand1>rand2){ 7 document.write("rand1の方が大きい値です"); 8}else if(rand1<rand2){ 9 document.write("rand2の方が大きい値です"); 10}else if(rand1===rand2){ 11 document.write("2つは同じ値です"); 12}

投稿2019/05/28 02:50

編集2019/05/28 02:55
miyabi_takatsuk

総合スコア9528

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/28 03:16

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

0

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

投稿2019/05/28 02:50

hentaiman

総合スコア6415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/28 03:16

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

0

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 02:50

編集2019/05/28 02:59
BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/28 03:16

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問