Как рассчитать среднюю оценку - PullRequest
1 голос
/ 10 октября 2019

Я новичок в JavaScript и, похоже, не могу понять, почему моя последняя функция не выполняет то, что она должна делать, а именно использовать среднее число введенных оценок (число) от пользователя, чтобы вернуть буквенную оценку.

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

Вот что я сделал в своем коде:

var grades = [];
var totalSum = 0;


function myFunction() {
  for (var i = 0; i < 5; i++) {
    grades[i] = parseInt(prompt("Enter a Grade: "));
    document.getElementById("gradeInput").innerHTML += grades[i] + "  ";
  }
}


function gradeAverage() {
  for (var i = 0; i < grades.length; i++) {
    totalSum += grades[i];
    var average = totalSum / grades.length;
  }
}


function letterGrade() {

  if (totalSum <= 90) {
    document.getElementById("finalGrade").innerHTML += average + " A";
  } else if (totalSum <= 80) {
    document.getElementById("finalGrade").innerHTML += average + " B";
  } else if (totalSum <= 70) {
    document.getElementById("finalGrade").innerHTML += average + " C";
  } else if (totalSum <= 60) {
    document.getElementById("finalGrade").innerHTML += average + " D";
  } else {
    document.getElementById("finalGrade").innerHTML += average + " F";
  }
}

myFunction();
gradeAverage();
letterGrade();

Ответы [ 5 ]

4 голосов
/ 10 октября 2019

Перед тем, как дать решение, вам необходимо разобраться с областями действия переменных в javascript.

Рассмотрим следующий код:

function myFunction() {
    var carName = "Volvo";
    //code here CAN use the variable carName
}

function someAnotherFunction(){
    console.log(carName);
    //code here CANNOT use the variable carName
    //It will the error that carName is not defined.
}
//code here CANNOT use the variable carName

Другой случай:

var carName = "Volvo";
function myFunction() {
    console.log(carName);
    //code here CAN use the variable carName
}

function someAnotherFunction(){
    console.log(carName);
    //code here CAN use the variable carName
}
console.log('Check my value here again: '+carName);
//code here CAN also use the variable carName

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

Так же, как вы не можете использовать переменную medium вне скобок, из которой она была объявлена,

Глядя на ваш код, нужно изменить несколько вещей.

  1. Переместите среднее объявление за скобки, чтобы оно стало видимым.
var average =0;
function gradeAverage() {
  for (var i = 0; i < grades.length; i++) {
    totalSum += grades[i];
    average = totalSum / grades.length;
  }
}

А в функции, где вычисляются оценки, необходимо добавить условие, когда среднее значение больше 90.

function letterGrade() {

  if (average >= 90) {
    document.getElementById("finalGrade").innerHTML += average + " A";
  } else if (average >= 80) {
    document.getElementById("finalGrade").innerHTML += average + " B";
  } else if (average >= 70) {
    document.getElementById("finalGrade").innerHTML += average + " C";
  } else if (average >= 60) {
    document.getElementById("finalGrade").innerHTML += average + " D";
  } else {
    document.getElementById("finalGrade").innerHTML += average + " F";
  }
}

Остальное будет хорошо, как есть.

Надеюсь, этопомогает.

1 голос
/ 10 октября 2019

Вам нужна средняя переменная как глобальная, и в вашей функции letterGrade () нужно исправить это следующим образом:

add: letterGrade () всегда будет возвращать A, если оценка равна 90 или ниже

var grades = [];
var totalSum = 0;
var average = 0

// function to read five values from series of prompts stored in array
function myFunction() {
  for (var i = 0; i < 5; i++) {
    grades[i] = parseInt(prompt("Enter a Grade: "));
    document.getElementById("gradeInput").innerHTML += grades[i] + "  ";
  }
}

// function to calculate the average of the five entered grades and store it in a variable
function gradeAverage() {
  for (var i = 0; i < grades.length; i++) {
    totalSum += grades[i];
    average = totalSum / grades.length;
  }
}

// funtion to use the average of entered grades to determine letter grade that it will return to the user
function letterGrade() {

  if (average >= 90 && average <= 100) {
    document.getElementById("finalGrade").innerHTML += average + " A";
  } else if (average >= 80 && average <= 89) {
    document.getElementById("finalGrade").innerHTML += average + " B";
  } else if (average >= 70 && average <= 79) {
    document.getElementById("finalGrade").innerHTML += average + " C";
  } else if (average >= 60 && average <= 69) {
    document.getElementById("finalGrade").innerHTML += average + " D";
  } else if (average <= 59) {
    document.getElementById("finalGrade").innerHTML += average + " F";
  }
}

myFunction();
gradeAverage();
letterGrade();
<p id="gradeInput">You entered the following grades: </p>
<p id="finalGrade">Your grade average is: </p>
1 голос
/ 10 октября 2019
  • переместить объявление среднего var за пределы функции (не очень рекомендуется, см. Позже)
  • обратить значения if с <= на> =
  • использовать среднюю, а не общую сумму вthe ifs

var grades = [];
var totalSum = 0;
var average =0;

// function to read five values from series of prompts stored in array
function myFunction() {
  for (var i = 0; i < 5; i++) {
    grades[i] = parseInt(prompt("Enter a Grade: "));
    document.getElementById("gradeInput").innerHTML += grades[i] + "  ";
  }
}

// function to calculate the average of the five entered grades and store it in a variable
function gradeAverage() {
  for (var i = 0; i < grades.length; i++) {
    totalSum += grades[i];
    average = totalSum / grades.length;
  }
}

// funtion to use the average of entered grades to determine letter grade that it will return to the user
function letterGrade() {

  if (average>= 90) {
    document.getElementById("finalGrade").innerHTML += average + " A";
  } else if (average>= 80) {
    document.getElementById("finalGrade").innerHTML += average + " B";
  } else if (average>= 70) {
    document.getElementById("finalGrade").innerHTML += average + " C";
  } else if (average>= 60) {
    document.getElementById("finalGrade").innerHTML += average + " D";
  } else {
    document.getElementById("finalGrade").innerHTML += average + " F";
  }
}

myFunction();
gradeAverage();
letterGrade();
<p id="gradeInput">You entered the following grades: </p>
<p id="finalGrade">Your grade average is: </p>

Лучше передайте переменную:

// function to read five values from series of prompts stored in array
function getGrades() {
  var grades = [];
  for (var i = 0; i < 5; i++) {
    grades[i] = parseInt(prompt("Enter a Grade: "));
    document.getElementById("gradeInput").innerHTML += grades[i] + "  ";
  }
  return grades;
}

// function to calculate the average of the five entered grades and store it in a variable
function getSum(grades) {
  var totalSum =  0;
  for (var i = 0; i < grades.length; i++) {
    totalSum += grades[i];
  }
  return totalSum;
}

// funtion to use the average of entered grades to determine letter grade that it will return to the user
function letterGrade(grades) {
  var totalSum = getSum(grades);
  var average = totalSum / grades.length;
  var finalGrade = "";
  if (average >= 90) {
    finalGrade = "A";
  } else if (average >= 80) {
    finalGrade = "B";
  } else if (average >= 70) {
    finalGrade = "C";
  } else if (average >= 60) {
    finalGrade = "D";
  } else {
    finalGrade = "F";
  }
  document.getElementById("finalGrade").innerHTML += average + " " + finalGrade;
}

var grades = getGrades()
letterGrade(grades);
<p id="gradeInput">You entered the following grades: </p>
<p id="finalGrade">Your grade average is: </p>
0 голосов
/ 10 октября 2019

3 проблемы здесь:

  1. В третьей функции вы используете «среднее» событие, хотя оно не определено глобально - это означает, что оно недоступно в функции.

  2. Кажется, вы проверяете totalSum <= x, даже если вы, вероятно, хотите проверить среднее <= x. </p>

  3. Порядок проверок в 3-й функции всегда будет приводить кПервая проверкаПотому что даже если среднее <= 60, это также <= 90. Поменяйте порядок чеков, чтобы младшие оценки были первыми: </p>

    if (totalSum <= 50) {
        document.getElementById("finalGrade").innerHTML += average + " F";
    } else if(totalSum <= 60) {
        document.getElementById("finalGrade").innerHTML += average + " D";
    } else if (totalSum <= 70) {
        document.getElementById("finalGrade").innerHTML += average + " C";
    } else if (totalSum <= 80) {
        document.getElementById("finalGrade").innerHTML += average + " B";
    } else if (totalSum <= 90) {
        document.getElementById("finalGrade").innerHTML += average + " A";
    } else {
        document.getElementById("finalGrade").innerHTML += average + " A+";
    }
    
0 голосов
/ 10 октября 2019

Это проблема объема. Вам нужно определить переменную average сверху, а не внутри функции gradeAverage.

var grades = [];
var totalSum = 0;
var average = 0; /* Added */

// function to read five values from series of prompts stored in array
function myFunction() {
  for (var i = 0; i < 5; i++) {
    grades[i] = parseInt(prompt("Enter a Grade: "));
    document.getElementById("gradeInput").innerHTML += grades[i] + "  ";
  }
}

// function to calculate the average of the five entered grades and store it in a variable
function gradeAverage() {
  for (var i = 0; i < grades.length; i++) {
    totalSum += grades[i];
    average = totalSum / grades.length;
  }
}

// funtion to use the average of entered grades to determine letter grade that it will return to the user
function letterGrade() {

  if (totalSum <= 90) {
    document.getElementById("finalGrade").innerHTML += average + " A";
  } else if (totalSum <= 80) {
    document.getElementById("finalGrade").innerHTML += average + " B";
  } else if (totalSum <= 70) {
    document.getElementById("finalGrade").innerHTML += average + " C";
  } else if (totalSum <= 60) {
    document.getElementById("finalGrade").innerHTML += average + " D";
  } else {
    document.getElementById("finalGrade").innerHTML += average + " F";
  }
}

myFunction();
gradeAverage();
letterGrade();
<p id="gradeInput">You entered the following grades: </p>
<p id="finalGrade">Your grade average is: </p>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...