Sanjay Taak Ответов: 4

Другая часть не выполняется


невозможно запустить следующий код js
другая часть не выполняется

Что я уже пробовал:

if ((m1 < 40) || (m2 < 40) || (m3 < 40) || (m4 < 40) || (m5 < 40) || (m6 < 40)) {
    result = "Fail";
    grade = "f";
}

else {
    var mm = avg;
    if (mm >= 80) {
        grade = "A";
        result = "Distinction";
    }
    elseif(mm >= 60)
    {
        grade = "B"
        result = "Firstclass";
    }
    elseif(mm >= 50)
    {
        grade = "C";
        result = "Secondclass";
    }
    elseif(mm >= 40)
    {
        grade = "D";
        result = "Pass";
    }
    elseif(mm < 40)
    {
        grade = "F";
        result = "Fail";
    }
}

Richard MacCutchan

Одно из этих значений (m1, m2 ...) должно быть меньше 40. А откуда вы берете ценность avg откуда?

0x01AA

И каковы значения для 'm1'...'m6', с которыми вы тестируете?

Sanjay Taak

var total = (m1 + m2 + m3 + m4 + m5 + m6);
//var avg = (всего / 600) * 100;
var avg = математический раунд(всего / 6);

Sanjay Taak

var m1 = parseInt(document.frmStudent.mark1.value);
var m2 = parseInt(document.frmStudent.mark2.value);
var m3 = parseInt(document.frmStudent.mark3.value);
var m4 = parseInt(document.frmStudent.mark4.value);
var m5 = parseInt(document.frmStudent.mark5.value);
var m6 = parseInt(document.frmStudent.mark6.value);

Sanjay Taak

значений м1м2.....больше 40 только

Richard MacCutchan

Вам нужно показать реальные цифры, нам все равно, откуда они берутся.

4 Ответов

Рейтинг:
2

OriginalGriff

Мы не можем запустить этот код изолированно и получить те же результаты, что и вы - у нас нет доступа к значениям, которые вы используете для тестирования.
Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от Вашего браузера, но быстрый поиск в Google имени и "отладчика" должен дать вам необходимую информацию.
Для Chrome вы найдете здесь много информации: Начните работу с отладки JavaScript в Chrome DevTools[^]
Другими браузерами wiull у аналогичных объектов.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
2

Richard MacCutchan

Мне пришло в голову, что ваша проблема связана с использованием неправильного оператора. У вас есть следующее:

if ((m1 < 40) || (m2 < 40) || (m3 < 40) || (m4 < 40) || (m5 < 40) || (m6 < 40)) {
    result = "Fail";
    grade = "f";
}

else {
    var mm = avg;
    // code removed for readability
}

Это означает, что если какое-либо из этих значений меньше 40, то результат-провал класса F. Однако что делать, если m2, m3,m4,m5 и m6 все выше 80? Это повысило бы средний балл до более высокого. Так что я думаю, что вы имеете в виду:
if ((m1 < 40) && (m2 < 40) && (m3 < 40) && (m4 < 40) && (m5 < 40) && (m6 < 40)) {
    result = "Fail";
    grade = "f";
}
else {
    var mm = avg;
    // code removed for readability
}

Что имеет больше смысла в том, что все баллы должны быть ниже 40 для неудачи.


Patrice T

не обязательно ошибаться оператором.
неудача, если значение 1 ниже 40 имеет для меня смысл.

Richard MacCutchan

Итак, если у вас есть 89,82,84,85,80,32: среднее значение 76,6, вы думаете, что это должно быть неудачей? Для меня это не имеет никакого смысла. На самом деле, согласно тестам в пункте else, это был бы пропуск первого класса класса B.

Patrice T

Я видел такие правила.

Richard MacCutchan

Но это не имеет значения.

Patrice T

только ОП может нам сказать :)

Richard MacCutchan

Именно это я и хочу сказать.

Sanjay Taak

братан если потерпишь неудачу в одной субмарине то будешь считаться только неудачником

Richard MacCutchan

Хорошо, но это не помогает выяснить, почему предложение else никогда не выполняется. Вам нужно запустить код в отладчике и изучить каждую переменную, чтобы увидеть, что происходит.

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

Sanjay Taak

братан В приведенном выше коде elseif должен быть подавлен пробелом потому что код является javascript следовательно он будет else if

Richard MacCutchan

Молодец, ты решил свою проблему.

Рейтинг:
1

Patrice T

Цитата:
невозможно запустить следующий код js

Мы тоже не можем, потому что не знаем значения переменной 7, от которой зависит код.
m1= ?; // Give sample values that lead to unexpected result
m2= ?;
m3= ?;
m4= ?;
m5= ?;
m6= ?;
avg= ?;
if ((m1 < 40) || (m2 < 40) || (m3 < 40) || (m4 < 40) || (m5 < 40) || (m6 < 40)) {
    result = "Fail";
    grade = "f";
}

else {
    var mm = avg;
    if (mm >= 80) {
        grade = "A";
        result = "Distinction";
    }
    elseif(mm >= 60)
    {
        grade = "B"
        result = "Firstclass";
    }
    elseif(mm >= 50)
    {
        grade = "C";
        result = "Secondclass";
    }
    elseif(mm >= 40)
    {
        grade = "D";
        result = "Pass";
    }
    elseif(mm < 40)
    {
        grade = "F";
        result = "Fail";
    }
}


Рейтинг:
0

W∴ Balboos, GHB

Если вы установили mm=avg и avg не был объявлен, то у вас есть условие ошибки.

javaScript останавливается в этот момент - более чем вероятно, без какого-либо сообщения об ошибке.

Кроме того, разве не имеет смысла рассчитать среднее значение перед любым тестом на оценки? Если только вся оценка не зависит от какого-либо одного теста из шести (в большинстве случаев, довольно несправедливо). Затем о <40 можно позаботиться в коммутаторе, и этот блок, проверяющий каждый экзаменационный балл на провал, может быть удален. На самом деле, вы уже делаете это в своем переключателе, так что вы ожидали, что доберетесь до этой точки, в любом случае !

Таким образом, это избавляет вас от вашего "если", и это означает, что вы также избавляетесь от остального: это просто переключатель, который вам нужен, и вам нужно вычислить это значение "avg". Кроме того, если у вас уже есть значение для 'avg', зачем вам тогда копировать его в mm и тестировать там? Просто используйте 'avg' в аргументе switch.

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

Все его, конечно, основано на коде, который вы показали, только