簡體   English   中英

基於傳入參數的計算器功能

[英]Calculator function based on passed in arguments

我正在構建一個簡單的計算器作為作業。 該函數使用兩個數字(number1,number2)和一個運算符(+,-,*,/)作為參數。

但是,有幾種情況:

  1. 如果缺少操作員->返回“提供了錯誤的數據”
  2. 如果不是,則正常計算
  3. 如果數字2丟失->假設+&-計算為數字“ 0”,而*&/計算為“ 1”

編輯:場景3應該只解釋傳入的2個參數(1個數字和1個運算符)。我知道這不是調用函數的正確方法,但這是我嘗試解決的任務的一部分。

這是我嘗試過的

function calc (number1, number2, operator) {
    if (operator == undefined) {
        return "wrong data provided"
    } else {
        if (operator == "+") {
            return number1+number2
        } else if (operator == "-") {
            return number1-number2
        } else if (operator == "*") {
            return number1*number2
        } else if (operator == "/") {
            return number1/number2
        }
    } 

    if (number2 == undefined) {
        if (operator == "+") {
                number2=0;
            return number1+number2
        } else if (operator == "-") {
                number2=0;
            return number1-number2
        } else if (operator == "*") {
            number2=1;
            return number1*number2
        } else if (operator == "/") {
            number2=1;
            return number1/number2
        }
    }  else {
        if (operator == "+") {
            return number1+number2
        } else if (operator == "-") {
            return number1-number2
        } else if (operator == "*") {
            return number1*number2
        } else if (operator == "/") {
            return number1/number2
        }
    } 
}

calc(50,“ +”)導致“提供了錯誤的數據。為什么?

您可以執行以下操作:

 function calc(par1, par2, par3) { var number1 = par1; var operator; var number2; if (typeof par2 === 'string') { operator = par2; } else { number2 = par2; operator = par3; } if (typeof operator === "undefined") { return "wrong data provided" } else { if (operator == "+") { return number1 + (number2 || 0); } else if (operator == "-") { return number1 - (number2 || 0); } else if (operator == "*") { return number1 * (typeof number2 === 'undefined' ? 1 : 0); } else if (operator == "/") { return number1 / (typeof number2 === 'undefined' ? 1 : 0); } } } console.log(calc(50, '+')); console.log(calc(50, '*')); console.log(calc(50, 20, '+')); console.log(calc(50, undefined, '*')); console.log(calc(50, 10)); 

在這里,我使用(number2 || 0)number2 undefined0(typeof number2 === 'undefined' ? 1 : 0)-+操作使用number20進行計算。 undefined number2時,對*/使用number21進行計算。

更好的代碼:

function calculate(number1,number2,operator){
if (!number1 || !number2){
    return "Invalid number"
}
if (!['*','-','/','+'].includes(operator)){
    return "Invalid operator"
}
switch(operator){
  case "+":
    return number1 + number2;
  case "/":
    return number1 * number2;
  case "*":
    return number1 * number2;
  case "-":
    return number1 - number2;
 }
}
console.log(calculate(5,6,"+"))
calc(50,"+")

在這里,您僅傳遞2個參數。 所以第三個參數是不確定的

calc(50,,"+")

傳遞3個參數

您可以定義您的變量如下

  • number1將來自params
  • 除非有一個運算符而不是數字,否則number2將作為參數。 如果有一個運算符,則取0或1取決於運算符
  • 運算符將從參數或number2中獲取其值

 const operators = ["+", "-", "*", "/"]; function calc(number1, n2, op) { // the part i add let number2; let operator = op; if (operators.includes(n2)) { if (n2 == "+" || n2 == "-") { number2 = 0; } else { number2 = 1; } operator = n2; } else { number2 = n2; } if (operator == undefined) { return "wrong data provided" } else { if (operator == "+") { return number1 + number2 } else if (operator == "-") { return number1 - number2 } else if (operator == "*") { return number1 * number2 } else if (operator == "/") { return number1 / number2 } } if (number2 == undefined) { if (operator == "+") { number2 = 0; return number1 + number2 } else if (operator == "-") { number2 = 0; return number1 - number2 } else if (operator == "*") { number2 = 1; return number1 * number2 } else if (operator == "/") { number2 = 1; return number1 / number2 } } else { if (operator == "+") { return number1 + number2 } else if (operator == "-") { return number1 - number2 } else if (operator == "*") { return number1 * number2 } else if (operator == "/") { return number1 / number2 } } } console.log(calc(50, "+")); 

您將錯誤的數據傳遞給函數。 在javascript中,您需要傳遞所有參數。

calc(50, "+")

您將獲得一個未定義的第3個參數,並且所有時間都是“提供的數據錯誤”。

calc(50, 0, "+")

如前所述,您必須使用正確的參數進行調用。 calc(50,0,"+") 但是,您可以進行破解-在許多庫中都很常見。

function calc (number1, number2, operator) {
    operator = operator || number2;
    number2 = (number2 === operator) ? undefined : number2;

    // Rest keep the same
    if (operator == undefined) {
        return "wrong data provided"
    }

第一步- operator = operator || number2; operator = operator || number2; -是將operator operator設置為operator ,但是如果它是偽造的(false,undefined,0等),它將分配number2。

第二步number2 = (number2 === operator) ? undefined : number2; number2 = (number2 === operator) ? undefined : number2; 如果number2和operator嚴格相等,則將number2設置為undefined。 如果它們不相同,則分配原始值,即number2。

現在您可以調用calc(50,"+") ,它將和calc(50,0,"+")

編輯:請注意,這現在將無法正常工作,因為首先是if它為false,那么它將立即嘗試進行數學運算...因此,您至少必須以這種方式進行更改:

if (operator == undefined) {
    return "wrong data provided"
} else if (number2 != undefined) {
  ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM