Java Scriptについて質問です。 (かなりの初心者で趣味で診断コンテンツを作成しています) 色々調べてみたものの、解決策が見つからずこちらに質問させていただきました。
Java Scriptについて質問です。 (かなりの初心者で趣味で診断コンテンツを作成しています) 色々調べてみたものの、解決策が見つからずこちらに質問させていただきました。 CountA が一番大きければ answer0 CountB が一番大きければ answer1 CountC が一番大きければ answer2 CountAとCountB が等しければ answer5 CountBとCountC が等しければ answer6 CountCとCountA が等しければ answer7 それ以外はanswer4 といったJS(以下)を書いているのですが、うまく結果が出力されません。 質問は10問に対して3択の診断コンテンツを作成していますが、Count Cを6回叩いてもanswer2が出力せず、またanswer6,7,4も出ない状況です。 基礎知識が足りない中での質問で申し訳ないのですが、こちら何が間違ってるか、正しいJSをご教示いただけないでしょうか。 ---------------------------- //結果を出力する関数 $('.end').on('click',function(){ if( countA > countB ) { $('#answer_01').css("display",""); //回答1 } else if( countB > countA ) { $('#answer_02').css("display","");//回答2 } else if( countC > countA ) { $('#answer_03').css("display","");//回答3 } else if( countA == countB ) { $('#answer_05').css("display","");//回答5 } else if( countB == countC ) { $('#answer_06').css("display","");//回答6 } else if( countC == countA ) { $('#answer_07').css("display","");//回答7 } else { $('#answer_04').css("display","");//回答4 } });
JavaScript | Java・75閲覧・250
ベストアンサー
CountA、CountB、CountCは面倒なので、全てA、B、Cで書き換えます。 こういう場合、3つの大小関係を最初に洗い出しておくと便利です。 【Aが最大となるパターン】 1.A > B > C 2.A > C > B 3.A > B = C 【Bが最大となるパターン】 4.B > A > C 5.B > C > A 6.B > A = C 【Cが最大となるパターン】 7.C > A > B 8.C > B > A 9.C > A = B 【上記以外で2つの値が等しくなるパターン】 10.A = B > C 11.A = C > B 12.B = C > A 【3つの値が等しくなるパターン】 13.A = B = C これらを元にあなたのコードを考えます。 まず最初の分岐は、if( countA > countB )です。 この条件に該当するのは5つです。 1.A > B > C 2.A > C > B 3.A > B = C 7.C > A > B 11.A = C > B よって、これら5つの時はanswer_01が出力されます。 次に、上記に該当しなかったもの(=残り8パターン)に対して、if( countB > countA )の判定が行われます。 残りの8パターンのうち、countB > countAに該当するのは4つです。 4.B > A > C 5.B > C > A 6.B > A = C 12.B = C > A よって、これら4つの時はanswer_02が出力されます。 countB > countAに該当しなかったもの(=残り4パターン)に対して、if( countC > countA )の判定が行われます。 残りの8パターンのうち、countC > countAに該当するのは以下の2つです。 8.C > B > A 9.C > A = B よって、これら2つの時はanswer_03が出力されます。 あと残っているのは、 10.A = B > C 13.A = B = C の2つです。 この2つに対して、if( countA == countB )の判定が行われます。 残り2つともcountA == countBに該当するので、answer_05が出力されます。 この時点で全パターンの分岐が終わるので、if( countB == countC )に引っかかるものは出てきません。 よって、answer_06、answer_07、answer_04が出力されることはありません。 不具合の根本は、"最大"をきちんと見ていないからでしょう。 「Aが最大」と「A > B」は違いますから。 まぁはじめのうちは、バカ正直に全13パターンのif文を書くのが無難かもしれません。 もっと言うと仕様が甘いです。 たとえば、質問には CountA が一番大きければ answer0 CountBとCountC が等しければ answer6 とあります。 3.A > B = Cの場合、「Aが最大」と「BとCが等しい」の両方を満たします。 この時、answer0とanswer6のどちらが出力されるのでしょう? こういったところまで十分に考慮されてないと思われます。 まずは仕様をしっかり固めるところからやり直した方が良いかと思います。 仕様が甘いまま実装すると、後々面倒なことになりますから。
2人がナイス!しています
質問者からのお礼コメント
詳細に書いていただきありがとうございました
お礼日時:6/28 15:36