Javascript 如果else返回true值,则该值实际上为false
我正在制作一个程序,要求用户输入两个数字(a和b)。然后,程序通过输入数字1表示加法,2表示减法,3表示乘法,4表示除法来询问他们是否要加、减、乘或除。如果输入了除1-4以外的任何其他数字(比如0),程序必须停止,并发出警报通知他们重新尝试计算。如果用户正确输入了前3个数字,那么他们应该在警报框中获得计算结果(这不起作用!) 然后用提示框询问他们是否希望进行另一次计算(y继续,其他任何内容结束程序),提示显示,但如果我输入任何内容,程序将继续。cont1()函数中有一个If-else语句,当用户输入一个与他/她希望完成的算术相对应的数字时,会调用该语句 目前我没有控制台错误,getValues()函数中的前3个提示框工作正常,但是add()、subtract等函数的算法工作不正常,警报窗口永远不会弹出答案Javascript 如果else返回true值,则该值实际上为false,javascript,Javascript,我正在制作一个程序,要求用户输入两个数字(a和b)。然后,程序通过输入数字1表示加法,2表示减法,3表示乘法,4表示除法来询问他们是否要加、减、乘或除。如果输入了除1-4以外的任何其他数字(比如0),程序必须停止,并发出警报通知他们重新尝试计算。如果用户正确输入了前3个数字,那么他们应该在警报框中获得计算结果(这不起作用!) 然后用提示框询问他们是否希望进行另一次计算(y继续,其他任何内容结束程序),提示显示,但如果我输入任何内容,程序将继续。cont1()函数中有一个If-else语句,当用户
这是我的代码!(编辑时间: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!");
}