我正在制作一个程序,要求用户输入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>
答案 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() {
作为旁注,您的代码假定用户输入是数字,这有两个原因是错误的。
在操作输入之前,您应该检查它。有许多技术可以确定输入是否为数字(很多都有优点和缺点),但是下面的内容是合适的:
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)
这不是你认为它正在做的事情。这是做什么的:
c
是否不等于1
。2
是否 truthy (它是)。3
是否 truthy (它是)。4
是否 truthy (它是)。由于逗号,返回的值实际为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
语句。