如果else返回true值,则该值实际为false

时间:2016-03-10 14:48:25

标签: javascript

我正在制作一个程序,要求用户输入2个数字(a和b)。然后程序通过输入数字1进行加法,2表示减法,3表示乘法,4表示除法,询问他们是否要加,减,乘或除。如果输入除1-4之外的任何其他数字(例如0),程序必须停止,并且警报告诉他们重新尝试计算。如果用户正确输入了前3个数字,那么他们应该在警告框中进行计算(这不工作!)。

然后他们被问到一个提示框,如果他们想要做另一个计算(y继续,其他任何结束程序),提示显示,但如果我输入任何东西,程序继续。在cont1()函数中有一个If else语句,当用户输入与他/她希望完成的算术相对应的数字时,该语句被调用。

目前我没有控制台错误,我的getValues()函数的前3个提示框正常工作,但add(),subtract等函数的算法运行不正常,警报窗口永远不会弹出回答。

这是我的代码!(编辑3/10/16 10:31) 编辑:我的if else语句现在正在运行..但算术仍然不起作用。   10:31编辑:算术部分现在已修复,因为我没有parseInt(),但是当用户输入假设停止prorgam时,cont1()函数仍然执行为true强>

10:52编辑:使用getValues()函数:函数检查a,b和c是否为数字,当我输入它返回的所有数字时它们不是数字。还摆脱了算术函数,将它们转换为switch语句。

<!DOCTYPE html>
<html lang="en-US">

<title> B_Math Calculator </title>

<head>
<script> 

function getValues()
{

 var a = parseInt(prompt("please enter the first number"), 1);
 var b = parseInt(prompt("please enter the second number"), 2);
 var c = parseInt(prompt("please enter 1 to : ADD , 2 to : SUBTRACT, 3 to : MULTIPLY, or 4 to : DIVIDE"), 1);

 if(isNaN(a) || isNaN(b) || isNaN(c)){
   alert("One or more of your inputs were not numeric!");
 }

 alert("Answer is: " + calc(a,b,c));
 cont1();
}

function calc(oper1, oper2, oper3){
  switch (oper3){
     case 1:
        return oper1 + oper2;
        break;
     case 2:
        return oper1 - oper2;
        break;
     case 3:
       return oper1 * oper2;
        break;
     case 4:
       return oper1 / oper2;
        break;
     default:
      alert("please enter 1 to : ADD , 2 to : SUBTRACT, 3 to : MULTIPLY, or 4 to : DIVIDE, press  Click here to do some math!, to try  again.");
      break;
  }
}

// ASK IF USER IS DONE (Y FOR YES , ANYTHING ELSE FOR NO)
function cont1()
{
  var answ = prompt("Next computation? Y : yes, any other letter  for no.");
  if(answ.toLowerCase() === "y") {
    getValues();
  } else {
    alert("thank you for using my calculator!");
  }
}

</script>
</head>
<body>
<button onclick="getValues()" value="Call Function"> Click here to do some math! </button>
</body>
</html>

4 个答案:

答案 0 :(得分:4)

这是实现目标的正确方法:

if(c==1) {
    add(a,b);
} else if(c==2) {
    subtract(a,b);
} else if(c==3) {
    multiply(a,b);
} else if(c==4) {
    divide(a,b);
} else {
    alert("please enter 1 to : ADD , 2 to : SUBTRACT, 3 to : MULTIPLY, or 4 to : DIVIDE, press  Click here to do some math!, to try  again.");
}

或者,更好的是:

switch (c){
   case 1:
      add(a,b);
      break;
   case 2:
      subtract(a,b);
      break;
   case 3:
      multiply(a,b);
      break;
   case 4:
      divide(a,b);
      break;
   default:
    alert("please enter 1 to : ADD , 2 to : SUBTRACT, 3 to : MULTIPLY, or 4 to : DIVIDE, press  Click here to do some math!, to try  again.");
    break;
}

这是一种更简洁的方法来构造if / else,只考虑一个表达式。

在任何一种情况下,适当的缩进都会使代码更具可读性。

您的return语句的位置也存在问题,因为您有更多的代码。 return语句不会向调用者返回一个值,但它也会向调用者返回编程控制,这意味着当函数遇到return时,它会返回ENDS。因此,在您的情况下,将不会处理返回后的代码。

此外,在您的cont1()功能中,您的测试是:

 if(answ = "y")

这不是测试answ以查看它是否具有&#34; y&#34;的值,单个等号分配&#34; {{1 }}&#34;到y,这是一个求值为answ的操作,这意味着您将始终执行true分支中的代码。您需要使用double(true)或triple(==表示相等而不进行转换)来比较值。

正如我所提到的,正确的代码格式化非常重要,不仅是为了可读性,还是为了处理。打开花括号应该出现在它们所属的行的末尾。这样:

===

和此:

 function foo()
 {

应该是:

 if(condition)
 {
     true code
 }
 else if (condition)
 {

和此:

 function foo() {

作为旁注,您的代码假定用户输入是数字,这有两个原因是错误的。

  1. 提示ALWAYS返回一个字符串,无论输入如何。
  2. 用户可能(将)输入意外的内容,例如&#34; one&#34;
  3. 在操作输入之前,您应该检查它。有许多技术可以确定输入是否为数字(很多都有优点和缺点),但是下面的内容是合适的:

     if(condition) {
         true code
     } else if (condition) {
    

    最后,为什么不只是有一个函数来决定基于什么算术做,而不是让4个单独的函数在很大程度上做同样的事情并决定用 var a = parseInt(prompt("please enter the first number"),10); var b = parseInt(prompt("please enter the second number"),10); var c = parseInt(prompt("please enter 1 to : ADD , 2 to : SUBTRACT, 3 to : MULTIPLY, or 4 to : DIVIDE"),10); if(isNaN(a) || isNaN(b) || isNaN(c)){ alert("One or more of your inputs were not numeric!"); } if调用哪个函数。在输入参数上。

    使用switch switch来了解包含所有这些要点的完整解决方案:https://jsfiddle.net/m0r5r4dx/17/

答案 1 :(得分:3)

(c!=1,2,3,4)

逗号运算符返回右侧的任何内容,因此评估为:

(false,2,3,4)

评估为:

4

如果要判断某个值是否在集合中,请使用数组。

if ( -1 == [1, 2, 3, 4].indexOf(c) )

答案 2 :(得分:3)

else if (c!=1,2,3,4)

这不是你认为它正在做的事情。这是做什么的:

  1. 检查c是否不等于1
  2. 检查2是否 truthy (它是)。
  3. 检查3是否 truthy (它是)。
  4. 检查4是否 truthy (它是)。
  5. 由于逗号,返回的值实际为4(意味着if语句无论如何都会忽略前3个。)

    您需要做的是将此else子句更改为:

    if (c != 1 && c != 2 && c != 3 && c != 4)
    

    或者:

    if (c < 1 || c > 4)
    

    我建议你在做其他任何事情之前先看看MDN's notes on if...else

答案 3 :(得分:1)

正如其他答案所提到的,检查c是1,2,3或4的方法不正确,但实际上你并不需要将C:\Users\osman_000>pip install virtualenv 'pip' is not recognized as an internal or external command, operable program or batch file. C:\Users\osman_000> 作为else if },当你到达它时,你已经知道else if不是1,2,3或4.你可以用c替换它,它应该有效。

此外,您的各种函数都会在else后面的代码永远不会执行,因为函数一到达return就会完成。由于您实际上并没有使用您返回的值执行任何操作,因此您应该删除return语句。