前提・実現したいこと
前回、ここで(https://teratail.com/questions/274345=カウントが0になったら残りの問題全てを不正解にしたい)で質問をさせていただきました。
そこで正答率を「正解の数/質問の数」で計算するというアドバイスをいただいたのでコードを書き直してみたのですが、全問正解しても正答率が50%になってしまいます。
以下のようにコードを書きました。
const accuracy = score + quizSet.length === 0 ? 0 : score / (score + quizSet.length) * 100;
発生している問題・エラーメッセージ
全問正解してもクイズの正答率が100%にならない。
該当のソースコード
javascript
1 2 3 let currentNum = 0; 4 let score = 0; 5 6 7 setQuiz(); 8 9 btn.addEventListener('click', () => { 10 if (btn.classList.contains('disabled')) { 11 return; 12 } 13 btn.classList.add('disabled'); 14 15 showResult(); 16 17 function showResult(){ 18 const accuracy = score + quizSet.length === 0 ? 0 : score / (score + quizSet.length) * 100; 19// [正答率の計算 %] 20 if (currentNum === quizSet.length - 1) { //最終問題だったらスコアを表示 21 scoreLabel.innerHTML = `${quizSet.length} <br> 22 ${score}<br> 23 ${accuracy.toFixed(2)}%`; 24 result.classList.remove('hidden'); 25 } else { //違ったら次の問題へ 26 currentNum++; 27 setQuiz(); 28 } 29 } 30 }); 31}
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
> const accuracy = score + quizSet.length === 0 ? 0 : score / (score + quizSet.length) * 100;
このコードは「正解の数/質問の数」には見えませんが、あなたはaccuracyにどのような意図の値を格納するためにこのコードを書いたのですか?
へたに三項演算子使うよりひとつずつ値を見ていった方が確実かと思います。
このコードはサイトにあるコードを参考に書きました。
accuracyはテンプレートリテラルで表示させるために格納させると解釈していました。
また、このコードが三項演算子ということも検索で知ったので、自分の知識不足のため的外れな質問をしていたのだとわかり、不快にさせてしまった方は申し訳ありませんでした。
いえ、的外れというのではなく、全体の見通しが良くなくなるし、使いこなすのはそこまで簡単ではないので、いきなりまとまったコードを書くのではなく、素直にひとつずつ仕様通りに流れ通りに書いていったほうが自分にも他者にも優しいコードになるのでは?という話をしてます
ありがとうございます、了解しました。
もう一度コードを自分なりに書き直してみたいと思います。
回答2件
あなたの回答
tips
プレビュー