Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果else返回true值,则该值实际上为false_Javascript - Fatal编程技术网

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

Javascript 如果else返回true值,则该值实际上为false,javascript,Javascript,我正在制作一个程序,要求用户输入两个数字(a和b)。然后,程序通过输入数字1表示加法,2表示减法,3表示乘法,4表示除法来询问他们是否要加、减、乘或除。如果输入了除1-4以外的任何其他数字(比如0),程序必须停止,并发出警报通知他们重新尝试计算。如果用户正确输入了前3个数字,那么他们应该在警报框中获得计算结果(这不起作用!) 然后用提示框询问他们是否希望进行另一次计算(y继续,其他任何内容结束程序),提示显示,但如果我输入任何内容,程序将继续。cont1()函数中有一个If-else语句,当用户

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

然后用提示框询问他们是否希望进行另一次计算(y继续,其他任何内容结束程序),提示显示,但如果我输入任何内容,程序将继续。cont1()函数中有一个If-else语句,当用户输入一个与他/她希望完成的算术相对应的数字时,会调用该语句

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


这是我的代码!(编辑时间:2016年3月10日10:31) 编辑:我的if-else语句正在工作。。但算法仍然不起作用。 10:31编辑:算术部分现在已经修复,因为我没有parseInt(),但是当用户的输入被假定为停止prorgam时,cont1()函数仍然作为true执行

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



数学计算器
函数getValues()
{
var a=parseInt(提示(“请输入第一个数字”),1);
var b=parseInt(提示(“请输入第二个数字”),2);
var c=parseInt(提示(“请输入1到:加,2到:减,3到:乘,或4到:除”),1);
if(isNaN(a)| | isNaN(b)| | isNaN(c)){
警报(“您的一个或多个输入不是数字!”);
}
警报(“答案是:“+calc(a,b,c));
cont1();
}
函数计算(操作1、操作2、操作3){
开关(操作3){
案例1:
返回操作1+操作2;
打破
案例2:
返回操作1-操作2;
打破
案例3:
返回oper1*oper2;
打破
案例4:
返回操作1/操作2;
打破
违约:
警告(“请输入1到:加法,2到:减法,3到:乘法,或4到:除法,按这里做一些计算,再试一次。”);
打破
}
}
//询问用户是否完成(Y表示是,其他表示否)
函数cont1()
{
var answ=提示(“下一次计算?Y:是,任何其他字母表示否”);
if(answ.toLowerCase()=“y”){
getValues();
}否则{
提醒(“谢谢你使用我的计算器!”);
}
}
点击这里做一些数学!
逗号运算符返回右侧的内容,因此其计算结果为:

(false,2,3,4)
4
其评估为:

(false,2,3,4)
4

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

if ( -1 == [1, 2, 3, 4].indexOf(c) )
这不是你想象的那样。这样做的目的是:

  • 检查
    c
    是否不等于
    1
  • 检查
    2
    是否真实(确实如此)
  • 检查
    3
    是否真实(确实如此)
  • 检查
    4
    是否真实(确实如此)
  • 由于使用逗号,返回的值实际上是
    4
    (这意味着
    if
    语句无论如何都会忽略前3个)

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

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

    if(c<1 | | c>4)
    

    我建议你在做任何其他事情之前先看一看。

    正如其他答案所提到的,你检查c是否为1、2、3或4的方法是错误的,但实际上你不需要最后一个
    else if
    成为
    else if
    ,因为当你达到它时,你已经知道
    c
    不是1、2、3或4。您可以用
    替换它,它应该可以工作


    此外,您的各种函数在
    返回
    之后都有一些永远不会执行的代码,因为函数一到达
    返回
    就结束了。由于您实际上没有对返回的值执行任何操作,因此您可能应该删除
    return
    语句。

    这是实现所需的正确方法:

    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
    时结束。因此,在您的情况下,不会处理返回之后的代码

    此外,在
    cont1()
    函数中,您的测试是:

     if(answ = "y")
    
    这不是测试
    answ
    以查看其值是否为“
    y
    ”,单个等号是将“
    y
    ”的值分配给
    answ
    ,这是一个计算结果为
    true
    ”的操作,这意味着您将始终在true分支中执行代码。您需要使用double(
    ==
    )或triple(
    ==
    表示无转换的相等)来比较值

    正如我所提到的,正确的代码格式不仅对可读性很重要,而且对处理也很重要。开始的大括号应该出现在它们所属的行的末尾。这:

     function foo()
     {
    
    这是:

     if(condition)
     {
         true code
     }
     else if (condition)
     {
    
     if(condition) {
         true code
     } else if (condition) {
    
    应该是:

     function foo() {
    
    这是:

     if(condition)
     {
         true code
     }
     else if (condition)
     {
    
     if(condition) {
         true code
     } else if (condition) {
    
    作为旁注,您的代码假定用户输入将是
     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!");
     }