お世話になります。
現在、スクールでJavaScriptの勉強しています。
宿題で以下のような問題がでました。
宿題
wihleを使ってダイアログボックスに入力した値が正解するまで、
ダイアログボックスを表示しつづけるプログラムを作成する
サンプルとして「数当てゲーム」という0~3までの数字のtrueとfalseを判定する
例題があり、このプログラムは最下段の通りです。
以下のプログラムを参考にwihleを使って、
ダイアログボックスに入力した値が正解するまで、
ダイアログボックスを表示しつづける
※間違いの時は「ハズレ!」のダイアログボックスで表示する。
↑「ハズレ!」表示の後で再度「数当てゲーム。0~2の数字を入力してね」を
正解するまで、繰り返し表示し続ける、にはどうすればよいのでしょうか?
お手数ですが詳しい方、説明の上手な方、教えて下さい。
※すいませんが、こちらの知識不足のため「○○すればいいよ」みたいな、
ご返答では理解できないと思います。
<script>
var number = Math.floor(Math.random() * 4);
var answer = parseInt(window.prompt('数当てゲーム。0~3の数字を入力してね。'));
var messege;
if(answer > 3) {
messege = '入力は0~3だよ!';
} else if(answer < number) {
messege = '残念でした!もっと大きい!';
} else if(answer > number) {
messege = '残念でした!もっと小さい!';
} else {
messege = 'あたり!';
}
window.alert(messege);
window.alert('答えは「' + number + '」でした');
console.log('終了確認')
</script>
No.3ベストアンサー
- 回答日時:
> while内に「number = answer;」がいるんですね。
いや、ちがいます
answer = parseInt(window.prompt('再チャレンジだよ!'));
のようにpromptで受け取ったデータをanswerに入れないといけないという意味です
何回もありがとうございます。
>answer = parseInt(window.prompt('再チャレンジだよ!'));
のようにpromptで受け取ったデータをanswerに入れないといけないという意味です
意味がわかりました。
ダイアログボックスの上のメッセージに入力するところしか見てませんでした。
answer = parseInt(window.prompt('再チャレンジだよ!'));
この1行で、ダイアログボックスの上のメッセージとは別に、
入力された値を受け取って文字列を整数に変換してから、
「answer」に入れてるんですね。
「while」の中にもう1度書かないと
2回目以降に受け取った値を「number」と判定する方法がないので、
絶対に当たらないということですね。
先のように「number = answer;」にすると、
2回目の答えが「number」に入ってしまうので、
2回目に必ず当たってしまう、、、というのもわかりました。
サンプルの3行目に同じ構文があるのに漠然と読んでいました。
何度も解答して頂きありがとうございます。
※他の方が何かアドバイスしてくれるかもしれないので、
質問はしばらく開けておきます。
No.2
- 回答日時:
while内のpromptをanswerが受けてないですよね
そうなるとanswerとnumber は一度はずすと二度と合致することはありません
それとif ( number == answer )のチェックでbreakしていますが
whileの条件と合致するのでわざわざbreakをしなくてもいいのかなと・・・
(あくまでもメッセージを切り替えるだけで十分)
ご解答ありがとうございます。
>while内のpromptをanswerが受けてないですよね
そうなるとanswerとnumber は一度はずすと二度と合致することはありません
while内に「number = answer;」がいるんですね。
気が付かなかったです。
最下段のコードで思っていたとおり動作するようになりました。
※「break」の件もありがとうございます。
あと、、、すいませんが、1つ気になることがあります。
お手数でなければ、教えて頂ければうれしいです。
※お手数でしたらスルーでOKです。
今回は解答して頂きありがとうございます。
機会がありましたら、またお願いいたします。
<---->
最初に頂いたコードで、
どうして4行目が「var answer = -1;」になっているのですか?
整数型の指定なので「var answer = 0;」だと思うのですが、
どうして「-1」なのでしょうか?
動作確認したところ「var answer = 0;」でも
正常に動作するので、余計に不思議に感じます。
「var answer = 0;」が無難だと思うのですが、
もし何か意味があるのでしたら、教えて頂ければうれしいです。
<---->
<script>
var number = Math.floor(Math.random() * 3);
var answer = parseInt(window.prompt('数当てゲーム。0~2の数字を入力してね。'));
while ( number != answer ) {
console.log(number)
window.alert('ハズレ!');
parseInt(window.prompt('再チャレンジだよ!'));
number = answer;
if ( number == answer ) {
window.alert('当たり!');
}
else{
}
}
console.log(number)
console.log('最終行-動作確認')
</script>
No.1
- 回答日時:
とりあえずキャンセルされたときの処理をいれる
あとはwhile内でpromptを呼びつづければよい
へたにparseIntすると答えが1のときに1.5とか入れても正解になるので注意
もちろんparseFloatしてるので答えが1のときに1.0を入力すると正解になります
きっかり"1"以外を受け付けないのであればそれなりの処理が必要です
<script>
var number = Math.floor(Math.random() * 4);
console.log(number);
var answer = -1;
var messege ='';
while(number!==answer){
answer = prompt('数当てゲーム。0~3の数字を入力してね。');
if(answer === null){
messege = 'キャンセルされました';
answer=number;
}else{
answer=parseFloat(answer);
if(![0,1,2,3].some(function(x){return x===answer;})){
messege = '入力は0~3だよ!';
} else if(answer < number) {
messege = '残念でした!もっと大きい!';
} else if(answer > number) {
messege = '残念でした!もっと小さい!';
} else if(answer == number) {
messege = 'あたり!';
}
}
alert(messege);
}
console.log('終了確認')
</script>a
解答して頂き、ありがとうございます。
バッチリです!
ありがとうございます。
後でベストアンサーを付けさせて頂きだきます。
もし、お手数でなければ、以下の件について教えて頂ければうれしいです。
※お手数でしたらスルーでOKです。
※他の人がアドバイスを下さるかもしれないので、しばらく質問はあけておきます。
昨日、自力で以下のところまで出来ました。
教えて頂いたコードと比べたのですが、シンプルになっているだけで、
差があるように思えないのですが、こちらのコードには以下の問題があります。
・1回目でハズレた場合、2回目以降、True、Falseの判定をしない
↑コンソールに表示された値を2回目に入力してもTrueの判定にならない
こちらはどうして2回目以降、True、Falseの判定が行われないのかわかりません。
↑ダイアログボックスは継続して表示しつづけます。
もし、何かお気付きのことがあれば、教えて頂ければうれしいです。
今回は解答して頂きありがとうございます。
<script>
var number = Math.floor(Math.random() * 3);
var answer = parseInt(window.prompt('数当てゲーム。0~2の数字を入力してね。'));
while ( number != answer ) {
console.log(number)
window.alert('ハズレ!');
parseInt(window.prompt('数当てゲーム。0~2の数字を入力してね。'));
if ( number == answer ) {
break;
window.alert('当たり!');
}
}
console.log(number)
console.log('最終行-動作確認')
</script>
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript 画像の表示位置 3 2022/12/23 08:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jQueryのload()を使用して外部...
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
Javaで避けるゲームを作ってい...
-
【JavaScript】数当てゲームを...
-
C#で、ContextMenuStripに動的...
-
javaScript textareaの一行あた...
-
翌月を取得するGASが分かりません
-
ASP.NETのコントロールの値をJa...
-
javascriptにお詳しい方に質問...
-
商品コードを入力で、商品名、...
-
JavaScriptで決まった「時刻」...
-
ホームページの最終更新日を他...
-
C# 演算 奇数と偶数 表現の仕方
-
特定のclassを表示、非表示にする
-
なぜmatchメソッドがエラーにな...
-
javascriptでカウントダウンタ...
-
ASP.NET MVCでObjectをjsに渡す
-
idを使わずにonclickで自身の要...
-
Linux バイナリ実行できない "...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
google apps scriptの終了のさせ方
-
C#OpenCv V4にのエラーに関する...
-
メールフォームの日付入力フォ...
-
GASでundefinedエラーが出ます
-
ジェネレーターの作り方
-
GASでGoogleフォームの自動返信...
-
なぜmatchメソッドがエラーにな...
-
翌月を取得するGASが分かりません
-
ローカルにあるファイルを検索...
-
HTMLで作った時報アプリが動き...
-
ASP.NETのコントロールの値をJa...
-
C# 演算 奇数と偶数 表現の仕方
-
html javascript リンク先アド...
-
gas スプレッドシートがアクテ...
-
javascriptでテーブルに追加し...
-
VSCODE[Python]の設定について
-
JavaScriptで決まった「時刻」...
-
ASP.NET MVCでObjectをjsに渡す
-
イベントが初めの一回しか起き...
-
jqGridについて
おすすめ情報
宿題の意図していることとは違いますが、ここまで自力でできました
解答時に文字数が足りなくて入力できない時は、画像を貼りつけていただければOKです。