Как писать и вызывать функции в javascript с помощью циклов for?

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

Результат должен выглядеть так:

Output: 

How many times to repeat?  2
Stats Solver execution 1 ====================
give a number  10.10203
give a number  20
give a number  30
give a number  40
give a number  50
sum: 150.10203
average: 30.020406
max: 50
min: 10.10203
ratio: 4.94
Stats Solver execution 2 ====================
give a number  3.21
give a number  2.1
give a number  1
give a number  5.4321
give a number  4.321
sum: 16.0631
average: 3.21262
max: 5.4321
min: 1
ratio: 5.43
done ====================

Вот код:

"use strict";

function myMain() {
  var num = Number(prompt("give a number of times to repeat, must be 0 or greater"));
  var count = num;
  for (var a=0; a<=num; a++) {count++;}
  alert("Stats Solver execution " + num + " ================== = ");
  if (num===0){alert("done ================== = "); return;}
  wall()
  alert("done ================== = ");

   
}                
function wall(){  
  var num1 = Number(prompt("provide a number"));
  var num2 = Number(prompt("provide a second number"));
  var num3 = Number(prompt("provide a third number"));
  var num4 = Number(prompt("provide a fourth number"));
  var num5 = Number(prompt("provide a fifth number"));
  
  var sum = (num1+num2+num3+num4+num5);
  alert("sum: " + sum);
  var avg = (sum/5);
  alert("average: " + avg);
  var max = (Math.max(num1,num2,num3,num4,num5));
  alert("max: " + max);
  var min = (Math.min(num1,num2,num3,num4,num5));
  alert("min: " + min);
  var ratio = (max/min);
  alert("ratio: " + Math.floor(ratio*100)/100);

}

myMain(); 
   

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

Bruno Ely 18.06.2018 22:52

Я не уверен, что не так, может также вывести ваш текущий вывод. Одна очень очевидная проблема, которую я вижу, заключается в том, что ваш цикл работает от 0 до num (включительно), что означает, что он запускается num+1 раз. Поэтому вам следует подумать о замене <= num на < num.

Stuti Rastogi 18.06.2018 22:54

Ваш цикл for в настоящее время ничего не делает, кроме увеличения count, который больше нигде не используется. Зачем вам эта переменная? Просто поместите фактический код, который вы хотите повторить, в цикл for.

Sebastian Simon 18.06.2018 22:55

Кроме того, не совсем уверен, какова роль count. Фактический код должен быть в цикле и использовать a вместо num для получения номера итерации.

Stuti Rastogi 18.06.2018 22:56

Код, который следует повторить, - это function.wall, указанный под функцией myMain. Я пытаюсь вызвать эту функцию в myMain, если в этом есть смысл? Прошу прощения, если я плохо это объясняю.

user9958716 18.06.2018 23:08
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
332
1

Ответы 1

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

Ваша стена функционирует, хотя и раздражает всеми предупреждениями, на самом деле правильная и не требует никаких настроек. С учетом сказанного вы можете поиграть с parseInt и parseFloat, чтобы убедиться, что вы получаете действительные числа, но я предполагаю, что это выходит за рамки задания.

Теперь перейдем к вашей основной функции.

var num = Number(prompt("give a number of times to repeat, must be 0 or greater"));

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

var count = num;
  for (var a=0; a<=num; a++) {count++;}
  alert("Stats Solver execution " + num + " ================== = ");
  if (num===0){alert("done ================== = "); return;}
  wall()
  alert("done ================== = ");

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

var count = num;

Здесь нет ничего сумасшедшего, вы просто создаете еще одну переменную для хранения значения в переменной num. Немного избыточно, но на самом деле не имеет большого значения.

for (var a=0; a<=num; a++) {count++;}

Это строка, которая, кажется, вызвала наибольшее замешательство. Это реальный цикл, но внутри его тела {....} ничего не делается, за исключением того, что в счетчик добавляется 1 (count ++). Если я правильно понимаю назначение, внутри этого цикла вам нужно вызвать функцию стены после предупреждения о выполнении Stats Solver ... Все, что вам нужно сделать, это переместить вызов функции внутри этого цикла.

if (num===0){alert("done ================== = "); return;}
      wall()
      alert("done ================== = ");

Ясно, что в этой части вы немного заблудились и просто пытаетесь заставить ее работать, не волнуйтесь, даже после более чем 12 лет разработки, я все еще пишу такой код;). Вам это действительно не нужно, так как фактический вызов wall () подойдет вам.

Мне скучно, и я жду работы, поэтому для полного ответа вот пример того, как должен выглядеть ваш код. Пожалуйста, не просто передавайте это, а попытайтесь понять разницу между тем, что я написал, и тем, что вы сделали, потому что это очень базовые концепции, которые, если вы замалчиваете, значительно усложнят вашу жизнь в будущем. Всегда смело спрашивайте, так люди учатся.

function myMain(){
    // get the number of repetitions from the user and cast as a number
    var num = Number(prompt('Please enter the number of times to repeat'));
    // loop from 0 to the number the user provided - 1 hence the < 
    for (var i = 0; i < num; i++){
        // alert the iteration of the loop, you will notice i add 1 to num when we alert it; this is because it starts at 0 so the first time it displays it would show 'Stats Solver execution 0 ======' instead of 'Stats Solver execution 1 ======'
        alert('Stats Solver execution ' + (num + 1) + ' ===============');
        // call your wall function
        wall();
        // go back to the top of the loop
    }
    // alert that we are done. 
    alert('done===============')
}
// your wall function goes here
// call your myMain function to kick everything off
myMain();

Просто ради удовольствия вы можете посмотреть console.info вместо alert, чтобы не делать его таким раздражающим процессом со всеми всплывающими окнами.

Если я что-то пропустил или вы что-то не понимаете, не стесняйтесь спрашивать, и я постараюсь ответить.

Я не ответил на это, но ИСКЛЮЧИТЕЛЬНО ценю ваше объяснение. Я вернулся и посмотрел несколько видео, чтобы лучше понять петли. Мне почему-то так сложно их понять. Ваше объяснение было отличным, и я не просто сдал то, что вы прислали, поскольку в будущем мне не будет смысла просто копировать чужую работу. Спасибо!

user9958716 16.07.2018 15:28

@ user9958716 Рад слышать, что смог помочь.

Adam H 16.07.2018 18:31

Другие вопросы по теме