Java Script + Node.js Калькулятор проблема - PullRequest
0 голосов
/ 06 октября 2018

Я «новый» разработчик в области веб-разработки, и я столкнулся с проблемой, на которую я надеялся, что вы, замечательные люди из Stack Overflow, сможете мне помочь.Я попросил нескольких Cadre и Инструкторов в моем классе, и мы все в замешательстве.

Для начала я решил поместить весь мой код в репозиторий Gitlab, так что если вы хотите посмотреть на все это(или если вы хотите добавить к нему, дайте мне знать): Ссылка на Github Repo .Я уверен, что вы, ребята, не хотите, чтобы все это было опубликовано в виде текстовой стены, а, скорее, отрывок того, что в файле, который я специально.Но это очень маленький файл

Я использую простой JavaScript, а также Node.Js, чтобы иметь возможность построить работающий калькулятор в бэкэнде, который я могу использовать в качестве шаблона для любого другого проекта, который мне понадобитсяработать в будущем.Сейчас я пытаюсь заставить это работать, вменяя вещи через консоль.

Я нашел способ, который вменяется в Node, и переменную imputArray, которую я настроил, и Array выглядит примерно так:

 [(command), (num1), (num2), (num3), ...]

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

Часть, в которой мне нужна помощь, - заставить блок кода работать так, как я хочу.Я настроил его так, чтобы он довольно легко выполнялся на двух числах, но я хочу, чтобы он обрабатывал столько чисел, сколько я хочу набросить.Я пробовал различные формы циклов for, а также циклов forEach, и я не могу заставить его работать.

 case 'divide':

    for (i = 1; i < numArray.length; i++) { // If any number besides the first is 0 spit out this
        if (numArray[i] === 0) {
            consol.log("You canot divide by zero!");
        }
        else {
            var previousTotal = numArray[0]; //Inital number in array       

            for (i = 1; i < numArray.length; i++) {
                previousTotal = previousTotal / numArray[i]; // for each number in array divide to the previous number
            }
        }

        result = previousTotal // Pushes end total to result
    }

    break;

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Я предполагаю, что вы хотите, чтобы команда деления выполняла ((num1/num2)/num3)/...

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

  // divide, 10, 2, 5
 case 'divide':
    if (numArray.length < 2) {
        console.log("no numbers in array")
        break;
    }
    // previousTotal starts with 10
    var previousTotal = numArray[1]; 

    // start from the second number which is 2
    for (i = 2; i < numArray.length; i++) {
        if (numArray[i] === 0) {
            console.log("You canot divide by zero!");
        }
        else {
            previousTotal = previousTotal / numArray[i]; // for each number in array divide to the previous number
        }
    }
    result = previousTotal;
    // result will be (10/2)/5 = 1
    break;
0 голосов
/ 06 октября 2018

Вам нужен только один цикл, и вы, вероятно, захотите прекратить итерации, если произойдет 0:

 result = numArray[0]; //no need for another variable

 for (var i = 1; i < numArray.length; i++) { // declare variables!
   if (numArray[i] === 0) {
     console.log("You canot divide by zero!"); // typo...
     break; // exit early
   }       
   result = result / numArray[i];            
 }

Конечно, это также можно записать более элегантно:

 const result = numArray.reduce((a, b) => a / b);
 if(isNaN(result)) {
   console.log("Can't divide by zero!");
 } else {
   console.log(`Result is ${result}`);
 }
0 голосов
/ 06 октября 2018

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

result += previousTotal

Или, если вы хотите получить массив ответов, которые вы хотите:

result.push(reviousTotal)

Извините, не 100%, что вы хотите.Надеюсь это поможет!

...