Я работаю над написанием кода для курса, и мне нужно выяснить, почему вывод кода не выполняется должным образом. Я очень новичок в программировании, это задание для начинающих, поэтому вся помощь и объяснения приветствуются.
Результат должен выглядеть так:
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();
Я не уверен, что не так, может также вывести ваш текущий вывод. Одна очень очевидная проблема, которую я вижу, заключается в том, что ваш цикл работает от 0 до num (включительно), что означает, что он запускается num+1 раз. Поэтому вам следует подумать о замене <= num на < num.
Ваш цикл for в настоящее время ничего не делает, кроме увеличения count, который больше нигде не используется. Зачем вам эта переменная? Просто поместите фактический код, который вы хотите повторить, в цикл for.
Кроме того, не совсем уверен, какова роль count. Фактический код должен быть в цикле и использовать a вместо num для получения номера итерации.
Код, который следует повторить, - это function.wall, указанный под функцией myMain. Я пытаюсь вызвать эту функцию в myMain, если в этом есть смысл? Прошу прощения, если я плохо это объясняю.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Что ж, вы действительно не так уж и далеко. На самом деле в вашем решении есть весь необходимый вам код, только часть его находится не в том месте. Я бы опубликовал это как комментарий, но поскольку это новая рабочая учетная запись, я не могу публиковать комментарии, поэтому вот полное решение с пояснениями.
Ваша стена функционирует, хотя и раздражает всеми предупреждениями, на самом деле правильная и не требует никаких настроек. С учетом сказанного вы можете поиграть с 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 Рад слышать, что смог помочь.
Что не так с вашей программой? Вы хотите, чтобы он распечатал этот вывод вместо того, чтобы показывать маленькие окна с предупреждениями?