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

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

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

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

Q&A

解決済

1回答

2063閲覧

javascript ジャンケンゲームの質問です。

Mirage

総合スコア4

JavaScript

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

0グッド

0クリップ

投稿2019/08/13 02:48

編集2019/08/13 04:44

javascript初心者です。お世話になります。

初心者向けテキストで以下のようなジャンケンの繰り返しの例がありましたが、最後の段落のwhile文で

let isLose = false; while (!isLose){ ・ ・ ・ isLose = true;

のところがよくわかりません。

まず isLose = trueは、 return '負けました。' と同義でしょうか。
またそれまでisLoseというのが出てきていないのに、なぜ isLose = true と return '負けました。'を関連付けて読み取ることができ、繰り返しをストップできるのかがよくわかりません。

そのところをご解決いただければ幸甚でございます。何卒よろしくお願い申し上げます。

(以下テキスト文です)

function janken () { /* 定数定義 ************************/ // ジャンケンの手の番号を設定 const GU = 1; const CHOKI = 2; const PA = 3; /* 関数定義 ************************/ // 人間に手を入力してもらう機能 function getHumHand() { let hum = prompt('半角数字で1~3の数字を入力してください。\n\n' + GU + ':グー\n' + CHOKI + ':チョキ\n' + PA + ':パー'); hum = parseInt(hum, 10); if (hum !== GU && hum !== CHOKI && hum !== PA) { return undefined; } else { return hum; } } // コンピュータの手を決める function getComHand() { return Math.floor(Math.random() * 3) + 1; } // コンピュータの手の名前を取得 function getHandName(num) { switch (num) { case GU: return 'グー'; case CHOKI: return 'チョキ'; case PA: return 'パー'; } } // 結果の判定 function getResult(com, hum) { if (hum === com) { return '結果はあいこでした。'; } else if ((com === GU && hum === PA) || (com === CHOKI && hum === GU) || (com === PA && hum === CHOKI)) { return '勝ちました。'; } else { return '負けました。'; } } // 最終的な結果のメッセージ function getResultMsg(com, hum) { return getResult(com, hum) + 'コンピュータの出した手は「' + getHandName(com) + '」でした'; } /* 実行する処理 ************************/ let hum = getHumHand(); if (!hum) { alert('入力値をうまく認識できませんでした。ブラウザを再読込すると、もう一度挑戦できます。'); } else { let com = getComHand(); alert(getResultMsg(com, hum)); return getResult(com, hum); } } let win = 0; let isLose = false; while (!isLose) { let result = janken(); if (result === '結果はあいこでした。') { continue; } if (result === '勝ちました。') { win++; alert('ただいま「' + win + '」勝です。'); continue; } alert('連勝はストップです。記録は「' + win + '」勝でした。'); isLose = true; }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/08/13 02:52

コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなりますので。 質問者さんもインデントされてないコードは読む気がしないのでは? 回答者・閲覧者はなおさらです。読んでもらえないと話が始まらないのですから、読んでもらえる努力をしましょう。
Mirage

2019/08/13 03:07

ご連絡ありがとうございます。質問文のコード部分をバッククォートで囲み、インデントしました。よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2019/08/13 03:11 編集

シングルクォート 3 つ ''' ではなくて、バッククォート 3 つ ``` です。上のコメントをよく見てください。 それから、囲うのはコードの各行ではなく、コードの始まりの行の直前の行に ``` を割り込ませ、コードの最後の行の次の行に ``` を割り込ませるのです。
Mirage

2019/08/13 03:40

度々申し訳ございません。やり直してみました。また不備がありましたら、お伝えいただければ幸いです。何卒よろしくお願い申し上げます。
退会済みユーザー

退会済みユーザー

2019/08/13 04:15

いえ、違いますよ。コードの部分がインデントされて見やすくなるようにしてくださいとお願いしてます。 具体的に言うと、質問文では(以下テキスト文です)以降がコードですが、その function janken () { の直前の行に ``` を割り込ませて、最後の } の下の行に ``` を割り込ませるのです。
Mirage

2019/08/13 04:28

テキスト文の方につけるということだったんですね。重ね重ねすみません。ただ回答をいただきまして、質問自体は解決いたしましたので、次回より気を付けます。この度はご指摘どうもありがとうございました。
退会済みユーザー

退会済みユーザー

2019/08/13 04:33

いえ、今からでも遅くないのできちんとインデントされるようにしてください。後で検索などでここを訪れる人がいるかもしれません。ここは質問者さん専用の Q&A サイトではなく、開発者同士の情報交換も目的にしているはずです。そういう人にもわかりやすいスレッドにするため、よろしくお願いします。
Mirage

2019/08/13 04:40

修正いたしました!
退会済みユーザー

退会済みユーザー

2019/08/13 04:49

対応いただきありがとうございました。
guest

回答1

0

ベストアンサー

js

1while (!isLose) { 2 let result = janken(); 3 if (result === '結果はあいこでした。') { 4 continue; 5 } 6 if (result === '勝ちました。') { 7 win++; 8 alert('ただいま「' + win + '」勝です。'); 9 continue; 10 } 11 alert('連勝はストップです。記録は「' + win + '」勝でした。'); 12 isLose = true; 13}

おそらくご理解されていないのはcontinue文なのではないかと思います。

continue 文は、現在のループまたはラベル付きループの現在反復中の文の実行を終了して、次の反復でループの実行を続けます。

continue - JavaScript | MDN

continue文はそれ以降の部分のコード実行を中止して、ループの先頭に戻ります。
なので、このコードは、以下のように動作します。
0. result === '結果はあいこでした。'の時、continue文によりループの先頭に戻ります。このループの周回はここで終わります。
0. 1の条件が成立しない場合は、ループの先頭に戻らず次のコードを実行します。
0. result === '勝ちました。'の時、諸々の処理をし、continue文によりループの先頭に戻ります。ループのこの周回はここで終わります。
0. 3の条件が成立しない場合は、ループの先頭に戻らず次のコードを実行します。
0. alert('連勝はストップです。記録は「' + win + '」勝でした。'); isLose = true;を実行しループの周回を終わります。つまり、1と3の条件が成立しない時だけ、このコードは実行されます。'負けました。'の場合もこれに含まれます。


なので、

まずisLose = trueは、return '負けました。'と同義でしょうか。

の答えは、「いいえ」です。

投稿2019/08/13 04:01

Lhankor_Mhy

総合スコア36104

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

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

Mirage

2019/08/13 04:07

早速ありがとうございました。おっしゃるとおり、continue文についてわかっていませんでした。すべて納得がいきました。どうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問