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

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

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

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

Q&A

解決済

4回答

949閲覧

Javascript 正しいループ処理

hiro_ike

総合スコア48

JavaScript

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

0グッド

0クリップ

投稿2021/05/03 14:59

promptへ文字列を入力させ、
タイプミスした場合は、最初のif文へループするようにしたいです。
下記のように自分で書いてみたのですが、そのようには動かないので(ループしない)、
アドバイスいただけますと助かります。

function startPrompt(){ startPrompt = prompt('"yes" or "no"を入力してください'); startPrompt = startPrompt.toLowerCase(); while (true){ if ( startPrompt === 'yes'){ goShopping() }else if (startPrompt === 'no'){ alert('さようなら') break; }else { return true; }

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

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

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

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

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

guest

回答4

0

苦戦してますね。
このくらいのコード量ならば必要性は感じないかもしれませんが、
機能を関数で分割するとパッと見て分かりやすくなりますよ。

javascript

1function startPrompt(){ 2 let ans; 3 while(true) { 4 ans = getCommand(); 5 if (ans == '') contine; 6 if (ans == 'yes') { 7 goShopping(); 8 } else { 9 alert('さようなら'); 10 } 11 break; 12 } 13} 14 15function getCommand() { 16 const cmd = prompt('"yes" or "no"を入力してください'); 17 let ret = cmd.toLowerCase(); 18 if (ret != 'yes' && ret != 'no') ret = ''; 19 return ret; 20}

投稿2021/05/03 21:08

takasima20

総合スコア7464

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

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

hiro_ike

2021/05/03 22:43

ありがとうございます。 初心者なため、大変助かります。 こういう書き方もあるのですね、確かに理解しやすいし、見やすいです。 勉強になりました。
guest

0

ベストアンサー

間違いがたくさんあります。

まず、startPromptfunctionとして定義したのに、
その中でstartPromptを変数?として使っています。
別の名前にしなければなりません。
たとえばanswerとしましょう。

そしてanswerという変数を使うには、
var answer = prompt('"yes" or "no"を入力してください');
などのようにしなければなりません。
この場合varではなくletでもよいです。
varletの違いは後で調べてください。ついでにconstも。

goShoppingを呼ぶのはいいですが、goShoppingから帰ってきた後の処理が抜けているようです。
このままではwhileでループして無限にgoSHoppingを呼ぶことになります。

answerが'yes'でも'no'でもなかったとき、returnしてしまっています。
それでは当然入力のやり直しにはなりません。

このループが、'yes'でも'no'でもなかったときに入力をやり直すようにしたいなら、
promptの呼び出しはwhileループの中に無ければならないですね。
そうでないとanswerは一生変化しないので無限ループになります。

whileのブロック{を閉じる}がありません。

えーと、とりあえず、このくらいかな?

投稿2021/05/03 15:19

itagagaki

総合スコア8402

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

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

0

文法エラーにはなってないのですよね?であれば、質問文へのコピペに失敗して途中で切れてますよ。

本題:
おちついて、処理を最初から追ってみましょう。声に出して読むのも有効です。
どんな処理を繰り返しているでしょうか?promptは繰り返さなくて良いのでしょうか?
"yes"の場合にどうしたいのでしたっけ?
"no"の場合にどうしたいのでしたっけ?
"yes"でも"no"でもない場合にどうしたいのでしたっけ?

追加のアドバイス:
・関数名と同名の変数を使うと混乱の元です。
varとかletとかを学びましょう。

投稿2021/05/03 15:14

編集2021/05/03 15:22
otn

総合スコア85901

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

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

0

ご丁寧にありがとうございます。
ご指摘いただいた箇所を下記のように訂正したら、やりたかったことは実現できました。

function startPrompt(){
while (true){
let answer = prompt('"yes" or "no"を入力してください');
answer = answer.toLowerCase();
if ( answer === 'yes){
goShopping()
}else if (answer === 'no'){
alert('さようなら')
break;
}else {
startPrompt ();
}
}}

  1. 入力のやり直しは、else で再度startPrompt ()を呼ぶで良いのでしょうか?
  2. goShopping 関数から返ってきたときは、何を書くか決めてませんがgoShopping関数内でstartPrompt() に行くように書こうと思ってました。(初心者なので、どうすべきが最適なのか分かっておりませんので、ご指摘いただけますと幸いです。)

投稿2021/05/03 17:07

hiro_ike

総合スコア48

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

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

itagagaki

2021/05/03 17:28

1) 2) いずれも、それでは再帰呼び出しになってしまいます。 関数について基本を学びましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問