Как перебрать серию запрашиваемых входов до определенного c числа в javascript? - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь создать простую функцию в javascript, которая принимает числовой ввод. Хранит это. И как только сумма всех введенных чисел равна или больше 50, для запроса на выход и для console.log для отображения количества набранных цифр и общей суммы.

Это HTML код, который связывает мой JS файл.

<!DOCTYPE html>
<html>
<head>
    <title>Ex6 JS</title>
    <script type="text/javascript" src="ex6.js"></script>
</head>
<body>
    <h1>Exercise 6 JS</h1>

</body>
</html>
var my_array = [];
var sum=0; 

var num_infinito = parseInt(prompt('Introduzca todos sus numeros'));

my_array.push(num_infinito);

if(my_array >= 50){
    cantidadNumeros();
    sumaNumeros();
}else{
    obtenerMasNumeros();
}

function obtenerMasNumeros(){

    var num_infinito = parseInt(prompt('Introduzca todos sus numeros'));
    my_array.push(num_infinito);

    for (var i = 0; i < my_array.length; i++) {

        sum += my_array[i++];

        if (sum>50) {
            cantidadNumeros();
            sumaNumeros();

        } else if (sum<50){
            var num_infinito = parseInt(prompt('Introduzca todos sus numeros'));
            my_array.push(num_infinito);

        } else {
            cantidadNumeros();
            sumaNumeros();
        }
    }
}

function cantidadNumeros(){
    //var my_arrayIndex = my_array.length; 
    console.log('Has ingresado '+ String(my_array.length) + ' numeros');
}

function sumaNumeros(){
    console.log('La suma de los numeros ingresados es ' + String(sum));
}

Вывод этого кода на данный момент таков:

Приглашение ввести номер. Если число> = 50, оно останавливается, но если число <= 50 (допустим, я ввожу 40), оно входит в функцию. Как только он входит в функцию, я наберу 50, но вместо остановки в первом операторе «если» он переходит прямо к состоянию «еще, если». Итак: мне предлагается ввести еще одно число, 40. </p>

После ввода 40 получится:

Has ingresado 3 numeros La suma de los numeros ingresados es 80

Итак, по какой-то причине второй 50 игнорируется, и он сразу переходит к третьему входному номеру (40) и добавляет его к первому входному номеру.

ВТОРОЙ

, если мне предложат набрать, и я наберу [1], а затем go для ввода 2, затем 3 и затем 4, функция останавливается на 4 и возвращает массив с 4 числами (1, 2, 3, 4), но без какого-либо вывода

THIRDLY

Скажем, 40 - первый вход, затем 10, затем 10. вывод:

total sum = 50 and my_array[3]

1 Ответ

0 голосов
/ 28 апреля 2020

Я добавил довольно подробные комментарии, чтобы объяснить поток. Я также показал вам, что вы должны делать, когда вы проверяете одно значение (поместите его и получите доступ к переменной). Таким образом, вы можете изменить порог, изменив одно число. Облегчает тестирование WAY . Попробуйте сами!

У вас возникли конфликты с тем, как вы организовывали и запускали свой код. Я добавил несколько комментариев, чтобы, надеюсь, показать вам, как настроить условный поток. Дайте мне знать, если у вас есть еще вопросы о коде, с которым я могу вам помочь. :)

var my_array = [];
// initial states are cleared on document load
var sum=0;
var thresh=50;

// This initially gets the obtener loop started by feeding it a number to start with
var num_infinito = parseInt(prompt('Introduzca todos sus numeros'));

my_array.push(num_infinito);

if(my_array >= thresh){
    // There will only be one value on start, so we don't need to loop here. Sum is the only value, index[0]
    sum = my_array[0];
    // Show values and run final function
    cantidadNumeros();
    sumaNumeros();
}else{
    // If value does not exceed the threshold, continue with running the function
    obtenerMasNumeros();
}

function obtenerMasNumeros(){
    // Grabbing another value
    var num_infinito = parseInt(prompt('Introduzca todos sus numeros'));
    // Add it to array
    my_array.push(num_infinito);
    // Re-init sum to go through the entire array
    sum = 0;
    var exceed = false; // We want to go through array no matter what
    for (var i = 0; i < my_array.length; i++) 
    {     
      // Where we add the sum (first time is 0 + my_array[i])
      sum += my_array[i];
      if (sum >= thresh)
      {
        // If we exceed 50, we want to set the flag
        exceed = true;
      }
    }
    // We've iterated and gotten the sum. Now we check if it's exceeded the threshold or not
    
    if ( exceed )
    {
        // Threshold is broken, run final sequence and return
        cantidadNumeros();
        sumaNumeros();
        return;
        // We return here to avoid the code below from running
    }
    obtenerMasNumeros();
}

function cantidadNumeros(){
    console.log('Has ingresado '+ my_array.length + ' numeros');
}

function sumaNumeros(){
    console.log('La suma de los numeros ingresados es ' + String(sum));
}
...