
最近Javascriptを学び始めたものです。
どうしてもわからないのでここに質問させていただきます。
<title>keisan.html</title>
<pre><script type="text/javascript">
<!--
// 変数 i:カウント,n, m:問題,sol:正解,ans:解答, t:正解, f:不正解,
var i, n, m, sol, ans ,t ,f;
// 10回反復
for (i=1; i<=10; i++) {
// 問題作成
n = Math.floor(Math.random() * 10) + 1;
m = Math.floor(Math.random() * 10) + 1;
sol = n + m; // 正解の保存
// 出題
ans = Number(prompt("第" + i + "問:" + n + "+" + m + "=?"));
// 判定
if (ans == sol)
document.writeln("第" + i + "問:" + n + "+" + m + "=?"+"解答"+ ans +" " + "正解です。");
else
document.writeln("第" + i + "問:" + n + "+" + m + "=?"+"解答"+ ans + " "+ "違います。 "+"正解は"+ sol +"です。")
}
//問題数のカウント
document.writeln("正解した問題数は"+ t +"です。");
document.writeln("不正解だった問題数は"+ f +"です。")
// -->
</script></pre>
ここまで書きました。
最後に正解と不正解の個数を画面に表示するようにしなければなりません。
問題の個数の数える変数(式)がわかりません。
わかる方、ヒントでもいいので教えてください。
No.2ベストアンサー
- 回答日時:
現在お困りの「問題の個数」とは、「問題に対する回答の、正解と不正解のそれぞれの個数」ということでよろしいでしょうか?
以下の回答は↑が前提ですが・・
Javascript内のコメントを見る限り、「問題数のカウント」を行う場所が
10回反復する処理(for文のブロック)の後に出てきますが、
この部分の考え方を変えてはいかがでしょうか?
問題にすべて回答し終わった後で正解・不正解を集計するのではなく、
1つ1つの問題に答えた時点で、正解・不正解の数をカウントしていくと楽だと思います。
ヒント(1)「正解・不正解数のカウントアップ方法」
t = t + 1;
↑のような書き方をご覧になったことはありますか?
この書き方をすると、その変数が持っている値に1だけ追加した数が得られます。
(変な例えですが、日本野鳥の会の人が手に持っているカウンタみたいなものです)
ヒント(2)「if文をブロック化」
for文の始めと終わりを{ }で囲むように、if文も始めと終わりを{ }で囲むことで
複数の処理を書くことができます。
以下のような感じです。
if (ans == sol)
{
// 正解だった場合の処理。
// 処理1:正解した旨をdocument.writeln()で書き出す。
// 処理2:正解の問題数をカウントアップ。
}
else
{
// 不正解だった場合の処理。
// 処理1:不正解の旨をdocument.writeln()で書き出す。
// 処理2:不正解の問題数をカウントアップ。
}
上記2つのヒントを元に少々手を加えれば、変数tとfには自然と
正解数・不正解数が入ると思います。
No.3
- 回答日時:
・ merBleu623様の丁寧な解説にこれ以上追加する必要もないかと思われますが、
初心者にとっては思いがけないところで躓いてしまうことがよくあるものです。
・ 老婆心ながら、少し変更も加えながら修正してみました。
・ 変数の初期化
・ Number()とparseInt()の微妙な違い
・ 回数と途中終了の追加
が加わっています。
以下のコードを参考にしてみてください。
------------------------------------------------------------
<html>
<title>keisan.html</title>
<script type="text/javascript">
<!--
// 変数 i:カウント,n, m:問題,sol:正解,ans:解答, t:正解, f:不正解, mi:未入力
var i, n, m, sol, ans ,t=0 ,f=0;
var t=0 ,f=0, mi=0;;
var ans0;
var count;
count = parseInt(prompt("何問回答しますか ?","10"));
// count回反復
for (i=1; i<=count; i++) {
// 問題作成
n = Math.floor(Math.random() * 10) + 1;
m = Math.floor(Math.random() * 10) + 1;
sol = n + m; // 正解の保存
// 出題
ans0 = prompt("第" + i + "問:" + n + "+" + m + "=?","");
if (ans0 == null) { // キャンセルボタン: 途中終了
break;
} else if (ans0 == "") {
mi++;
document.writeln("第" + i + "問: " + n + "+" + m + "=? "+"解答 未入力です。"+"\t正解は"+ sol +"です。<br />");
continue;
}
ans = parseInt(ans0);
// 判定
if (ans == sol) {
t++;
document.writeln("第" + i + "問: " + n + "+" + m + "=? "+"解答"+ ans +" " + "\t正解です。<br />");
} else {
f++;
document.writeln("第" + i + "問: " + n + "+" + m + "=? "+"解答"+ ans + " "+ "\t違います。"+"正解は"+ sol +"です。<br />");
}
}
//問題数のカウント
if ( count>0 ) {
document.writeln("<hr />正解した 問題数は\t"+ t +"です。<br />");
document.writeln("<hr />不正解の問題数は\t"+ f +"です。<br />")
document.writeln("<hr />未入力の問題数は\t"+ mi +"です。<br />")
document.writeln("<hr />")
}
// -->
</script>
<head></head>
<body>
</body>
</html>
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクト配列の各メンバを...
-
Outlookのアカウントがあるとメ...
-
スマホ上で、左右スワイプで次...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
-
プログラムについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
window.openでタイトル名の指定
-
JavaScriptとHTMLの課題です
-
○歳△ヶ月と×日を計算してくれる...
-
テキストボックスに入力された...
-
JavaScriptで乱数+乱数の計算結...
-
javaで画像をランダム表示しつ...
-
ブラウザによるCSSの切替スクリ...
-
<tbody> スクロール
-
ウェブ上にキーボードを作りた...
-
問題の個数を数える。
-
htmlの中に記述している画像フ...
-
Javascriptで動的にテーブル表...
-
document.writeで画面が消える
-
writeメソッドでレイヤーに書き...
-
innerHTMLにて設定した情報を再...
-
VscodeでFor分を入力しましたが...
-
あるページを開いた際、常にそ...
-
java scriptでの表示件数の制御...
-
innerHTMLに重なるselectボックス
-
今日の月と日付の1週間後や3日...
おすすめ情報