Математика массива Javascript не складывается должным образом

У меня есть последовательность массивов в виде оценок отдельных вопросов, а затем массив для добавления оценки на основе оценок вопросов к основной оценке:

var totscore = 0
var subscore = 0

var _scores7 = [2, 1, 0];
var _scores8 = [3, 2, 1, 0];
var _scores9 = [3, 2, 1, 0];
var _scores10 = [2, 1, 0];
var _scores11 = [1, 0];
var _scores12 = [2, 1, 0];
var _scores13 = [2, 1, 0];

var subScores = [0, 1, 2, 3, 4, 5, 6];

Затем предполагается, что вопросы суммируют баллы в зависимости от ответов на переключателях:

if(document.getElementById("q7a").checked){
    subscore += _scores7[0];
} else if(document.getElementById("q7b").checked){
    subscore += _scores7[1];
} else if(document.getElementById("q7c").checked){
    subscore += _scores7[2];
} else alert("Question seven has not been finished.");

if(document.getElementById("q8a").checked){
    subscore += _scores8[0];
} else if(document.getElementById("q8b").checked){
    subscore += _scores8[1];
} else if(document.getElementById("q8c").checked){
    subscore += _scores8[2];
} else if(document.getElementById("q8d").checked){
    subscore += _scores8[3];
} else alert("Question eight has not been finished.");

if(document.getElementById("q9a").checked){
    subscore += _scores9[0];
} else if(document.getElementById("q9b").checked){
    subscore += _scores9[1];
} else if(document.getElementById("q9c").checked){
    subscore += _scores9[2];
} else if(document.getElementById("q9d").checked){
    subscore += _scores9[3];
} else alert("Question nine has not been finished.");

if(document.getElementById("q10a").checked){
    subscore += _scores10[0];
} else if(document.getElementById("q10b").checked){
    subscore += _scores10[1];
} else if(document.getElementById("q10c").checked){
    subscore += _scores10[2];
} else alert("Question ten has not been finished.");

if(document.getElementById("q11a").checked){
    subscore += _scores11[0];
} else if(document.getElementById("q11b").checked){
    subscore += _scores11[1];
} else alert("Question eleven has not been finished.");

if(document.getElementById("q12a").checked){
    subscore += _scores12[0];
} else if(document.getElementById("q12b").checked){
    subscore += _scores12[1];
} else if(document.getElementById("q12c").checked){
    subscore += _scores12[2];
} else alert("Question twelve has not been finished.");

if(document.getElementById("q13a").checked){
    subscore += _scores13[0];
} else if(document.getElementById("q13b").checked){
    subscore += _scores13[1];
} else if(document.getElementById("q13c").checked){
    subscore += _scores13[2];
} else alert("Question thirteen has not been finished.");

Предполагается, что полученная здесь оценка будет использоваться в следующем коде:

switch(true){
    case (subscore == 0):
        totscore += subScores[6];
        break;
    case (subscore >= 1 && subscore <= 3):
        totscore += subScores[5];
        break;
    case (subscore >= 4 && subscore <= 6):
        totscore += subScores[4];
        break;
    case (subscore >= 7 && subscore <= 8):
        totscore += subScores[3];
        break;
    case (subscore >= 9 && subscore <= 11):
        totscore += subScores[2];
        break;
    case (subscore >= 12 && subscore <= 14):
        totscore += subScores[1];
        break;
    case (subscore == 15):
        totscore += subScores[0];
        break;
    default:
        alert(subscore);

Моя основная проблема заключается в том, что добавление подсчета не заканчивается там, где я хочу.

Когда вы выбираете ответы, которые должны дать вам ноль дополнительных баллов, вы получаете шесть. Когда вы отвечаете на вопросы, которые должны дать вам пятнадцать баллов, вы получаете ноль. Если вы ответите посередине, вы получите три или четыре.


person Jonathan Burks    schedule 08.06.2016    source источник
comment
Вы уже прошли свой код с помощью отладчика?   -  person fvu    schedule 08.06.2016
comment
У меня есть. На консоли, кажется, нет никаких синтаксических ошибок, которые я могу найти, и ничего больше не появляется. Я думаю, что это написано (относительно) добротно.   -  person Jonathan Burks    schedule 08.06.2016
comment
Мне трудно понять, что вы ожидаете. Не могли бы вы сократить это только до subScore7 и, может быть, до 8? Я предполагаю, что subscore начинается с 0?   -  person Teepeemm    schedule 08.06.2016
comment
О, я забыл показать их. да, подсчет начинается с нуля. Причина того, что все вопросы имеют разные массивы, заключается в том, что вес каждого вопроса может измениться в будущем, и я решил, что самый простой способ изменить его — дать каждому вопросу легко идентифицируемый массив.   -  person Jonathan Burks    schedule 08.06.2016
comment
Моя главная проблема в том, что математика не складывается. Я не понимаю, что если вы выберете ответы, связанные с наибольшими числами, вы получите шесть. Есть ли что-то, чего я не понимаю в математике массивов в Javascript?   -  person Jonathan Burks    schedule 08.06.2016


Ответы (1)


Я понял свою ошибку.

Оператор switch в конце имеет значение по умолчанию:

alert(subscore)

Не было фактического предупреждения для подсчета вне оператора switch. Таким образом, функция на самом деле правильно вычисляла общий результат, и я неправильно понял это как предупреждение о значении подсчета.

Код на самом деле правильный, я искал ошибку в расчете, когда моя ошибка была в отображении ответа.

person Jonathan Burks    schedule 08.06.2016